如何通过 OverPass API 获取父级管理边界

Fra*_*čik 7 openstreetmap overpass-api

具有一定级别的行政边界关系,如何获得父级边界?

\n\n

这适用于布拉迪斯拉发市部分 Petr\xc5\xbealka:\n http://overpass-turbo.eu/s/ewU

\n\n
[out:csv(::id,::type,"name","admin_level")];\nrel(2208781);\n(._;<<;);\nout;\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是:

\n\n
@id     @type       name                    admin_level\n14296   relation    Slovensko               2\n388210  relation    okres Bratislava V      8\n388265  relation    Bratislavsk\xc3\xbd kraj       4\n1702499 relation    Bratislava              6\n2208781 relation    Petr\xc5\xbealka               9\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不适用于维也纳部分 Meidling\n http://overpass-turbo.eu/s/ex1

\n\n
[out:csv(::id,::type,"name","admin_level")];\nrel(1990596);\n(._;<<;);\nout;\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果

\n\n
@id     @type       name        admin_level\n1990596 relation    Meidling    9\n
Run Code Online (Sandbox Code Playgroud)\n\n

显然,问题在于维也纳边界关系中没有定义子关系。有什么可靠的方法可以找到这些亲子关系吗?

\n

use*_*.dz 1

再次搜索附近然后向下

\n

它还不是完美的,因为我仍然不知道如何进行递归查询。

\n
    \n
  1. 寻找附近的更高行政部门。(对于附近的城镇来说5公里似乎不错)

    \n
    [out:csv(::id,::type,"name","admin_level")];\nrel(id:1990596);\nrelation["admin_level"~"8|7|6|5|4"](around:5000);\n(._;<<;);\nout;\n
    Run Code Online (Sandbox Code Playgroud)\n
    \n
    @id   @type   name    admin_level\n16239 relation    \xc3\x96sterreich  2\n77189 relation    Nieder\xc3\xb6sterreich    4\n109166    relation    Wien    4\n111858    relation    Bezirk M\xc3\xb6dling  6\n111881    relation    Gemeinde Hennersdorf    8\n111887    relation    Gemeinde Breitenfurt bei Wien   8\n111946    relation    Gemeinde Perchtoldsdorf 8\n111948    relation    Brunn am Gebirge    8\n111956    relation    Gemeinde V\xc3\xb6sendorf  8\n2668952   relation    European Union / Union Europ\xc3\xa9enne / Europ\xc3\xa4ische Union   \n12729625  relation    Eurozone / Zone euro    \n13376469  relation    Member States of the European Union / \xc3\x89tats members de l\'Union europ\xc3\xa9enne / Mitgliedstaaten der Europ\xc3\xa4ischen Union\n
    Run Code Online (Sandbox Code Playgroud)\n
    \n
  2. \n
  3. 查找每个内部较低的管理人员以进行验证

    \n
    [out:csv(::id,::type,"name","admin_level")];\narea["name"="Wien"]["admin_level"="4"]->.target_area;\nrelation["admin_level"~"9|8|7|6|5"](area.target_area);\n(._;<<;);\nout;\n
    Run Code Online (Sandbox Code Playgroud)\n
    \n
    @id   @type   name    admin_level\n1990590   relation    Alsergrund  9\n1990591   relation    Hietzing    9\n1990592   relation    Innere Stadt    9\n1990593   relation    Josefstadt  9\n1990594   relation    Leopoldstadt    9\n1990595   relation    Mariahilf   9\n1990596   relation    Meidling    9\n1990597   relation    Neubau  9\n1990598   relation    Penzing 9\n1990599   relation    Rudolfsheim-F\xc3\xbcnfhaus    9\n1990600   relation    W\xc3\xa4hring 9\n1991416   relation    Landstra\xc3\x9fe  9\n1991433   relation    Brigittenau 9\n1991434   relation    Donaustadt  9\n1991435   relation    D\xc3\xb6bling 9\n1991436   relation    Favoriten   9\n1991437   relation    Floridsdorf 9\n1991438   relation    Hernals 9\n1991439   relation    Liesing 9\n1991440   relation    Margareten  9\n1991441   relation    Ottakring   9\n1991442   relation    Simmering   9\n1991443   relation    Wieden  9\n3980995   relation    Amtshaus f\xc3\xbcr den 16. Bezirk 9\n
    Run Code Online (Sandbox Code Playgroud)\n
    \n
  4. \n
\n

长期解决方案

\n

最好的仍然是直接回馈并更新父关系。不需要太长时间,维基数据/维基百科已经公开了此类信息。或者至少提交一份关于 Meidling 的 OSM“注释”,以便有知识的人可以修复它。

\n

更新:还不够好

\n

使用 foreach,https://overpass-turbo.eu/s/1B5X

\n
[out:csv(::id,::type,"name","admin_level")];\n\nrel(id:2208781)->.t;\n\nrel["admin_level"~"9|8|7|6|5|4|3|2"](around.t:5000)->.n;\n//.n out;\nforeach.n ->.e(\n  .e map_to_area->.ea;\n  rel(id:2208781)(area.ea)->.c;\n  if (c.count(relations))\n  {\n    .e out;\n  };\n);\n
Run Code Online (Sandbox Code Playgroud)\n
\n
@id   @type   name    admin_level\n14296 relation    Slovensko   2\n388265    relation    Bratislavsk\xc3\xbd kraj   4\n1702499   relation    Bratislava  6\n14613937  relation    Bratislavsk\xc3\xa1 arcidiec\xc3\xa9za    6\n388210    relation    okres Bratislava V  8\n2208781   relation    Petr\xc5\xbealka   9\n
Run Code Online (Sandbox Code Playgroud)\n
\n

其他城镇:https://overpass-turbo.eu/s/1B5Y

\n
[out:csv(::id,::type,"name","admin_level")];\n\nrel(id:1990596)->.t;\n\nrel["admin_level"~"9|8|7|6|5|4|3|2"](around.t:5000)->.n;\n//.n out;\nforeach.n ->.e(\n  .e map_to_area->.ea;\n  rel(id:1990596)(area.ea)->.c;\n  if (c.count(relations))\n  {\n    .e out;\n  };\n);\n
Run Code Online (Sandbox Code Playgroud)\n
\n
@id   @type   name    admin_level\n16239 relation    \xc3\x96sterreich  2\n109166    relation    Wien    4\n
Run Code Online (Sandbox Code Playgroud)\n
\n