从openstreetmap获取城市边界

mar*_*rey 6 php openstreetmap

我正在开发一个网站,我需要根据用户输入获得一个区域的所有边界.例如,用户想要知道名为x的城市的边界.我应该如何从openstreetmap获取它?我听说过xapi和渗透,但在任何地方都找不到任何例子.谢谢!

pgk*_*ley 2

我尝试使用 JavaScript 来完成此操作: https ://github.com/pgkelley4/city-boundaries-google-maps

基本上,它归结为找到OpenStreetMap 存储城市边界的关系。

我使用类似以下查询来获取该区域:

area[name="Seattle"]["is_in:state_code"="WA"];foreach(out;);
Run Code Online (Sandbox Code Playgroud)

或者,如果没有找到任何内容,则通过节点查找任何相关区域:

node[name="New York"][is_in~"NY"];foreach(out;is_in;out;);
Run Code Online (Sandbox Code Playgroud)

要获取关系 ID,请从上述查询返回的区域 ID 中减去 3600000000。然后从它的 ID 中获取关系:

(relation(" + relationID + ");>;);out;
Run Code Online (Sandbox Code Playgroud)

您可以在这里测试查询,我的查询可能可以改进: http://overpass-api.de/query_form.html

这就是如何获取城市边界,处理它们是另一回事,因为关系中没有任何东西是有序的。为此,请参阅我的 GitHub 项目和: http://wiki.openstreetmap.org/wiki/Relation:multipolygon /Algorithm

我还要指出的是,城市边界的 OpenStreetMap 数据参差不齐。据我所知,像达拉斯和洛杉矶这样的大城市缺少这种功能。