问题描述
{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
在我的结果集中,它有时会返回城市,有时不会......希望这会有所帮助。