从 Overpass-turbo 获取有关系的城市、郊区列表

问题描述

我正在努力构建一个具有以下结构的迷你数据库

{countryId,governorateId,cityId}

这个想法是: 我需要找到埃及的所有 admin_level=4,然后对于每个结果,获取城市|郊区|城镇

示例: 开罗:['纳斯尔城'、'第五卫星'等]

开罗 = 省,“纳斯尔市” = 郊区

到目前为止我所拥有的:

[out:csv(::id,'place','name:ar','name:en')][timeout:25];
// fetch area “Egypt” to search in
{{geocodeArea:Egypt}}->.searchArea;
// gather results
(
  node[place~"city|town|suburb"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

它给了我列表,但没有关系,所以我不知道哪个 suburb 在哪个 city

解决方法

当你在不过滤列的情况下编写查询时,它应该返回它会返回一个像这样的节点:

<node id="21320911" lat="-33.9783333" lon="25.5874001">
    <tag k="is_in" v="Port Elizabeth,Eastern Cape,South Africa"/>
    <tag k="name" v="Walmer"/>
    <tag k="place" v="suburb"/>
    <tag k="sagns_id" v="62090"/>
    <tag k="source" v="sagns"/>
    <tag k="wikidata" v="Q61356595"/>
  </node>

因此,要提取关系,您可以将“is_in”列添加到查询中,使其看起来像这样......

[out:csv(::id,'name','is_in','place')][timeout:25];
// fetch area “South Africa” to search in
{{geocodeArea:South Africa}}->.searchArea;
// gather results
(
  node[place~"city|town|suburb|street"](area.searchArea);
);
// print results
out body;
>;
out skel qt;

这应该显示您的郊区和城市,包括国家/地区。例如:

@id name    is_in   place
21320910    Newton Park "Port Elizabeth,South Africa"    suburb
21320911    Walmer  "Eastern Cape,South Africa"    suburb
21320912    Mill Park   "Eastern Cape,South Africa"    suburb

在我的结果集中,它有时会返回城市,有时不会......希望这会有所帮助。