从openstreetmap获取城市边界

时间:2013-03-27 12:17:16

标签: php openstreetmap

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

1 个答案:

答案 0 :(得分:2)

我在这里尝试使用JavaScript: https://github.com/pgkelley4/city-boundaries-google-maps

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

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

area[name="Seattle"]["is_in:state_code"="WA"];foreach(out;);

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

node[name="New York"][is_in~"NY"];foreach(out;is_in;out;);

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

(relation(" + relationID + ");>;);out;

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

这就是如何获得城市边界,处理它们是另一个问题,因为在关系中没有任何顺序。为此,请参阅我的GitHub项目并: http://wiki.openstreetmap.org/wiki/Relation:multipolygon/Algorithm

另外我会注意到城市边界的OpenStreetMap数据不稳定。据我所知,达拉斯和洛杉矶等大城市都缺席了这一点。