【问题标题】:Get the list of cities, suburbs with relations from Overpass-turbo从 Overpass-turbo 获取有关系的城市、郊区列表
【发布时间】:2021-01-06 19:56:19
【问题描述】:

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

{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里面

【问题讨论】:

    标签: openstreetmap overpass-api


    【解决方案1】:

    当您编写该查询而不过滤它应该返回的列时,它将返回一个类似这样的节点:

    <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, Eastern Cape, South Africa"    suburb
    21320911    Walmer  "Eastern Cape, South Africa"    suburb
    21320912    Mill Park   "Eastern Cape, South Africa"    suburb
    

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

    【讨论】:

    • 不幸的是,我尝试了“is_in”,但它总是空的。没有一个节点返回值!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-09
    • 2011-09-15
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2019-12-11
    相关资源
    最近更新 更多