2013-03-27 253 views
5

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

+1

你甚至试过Google搜索吗? http://global.mapit.mysociety.org/ – 2013-03-27 13:02:14

+0

https://help.openstreetmap.org/questions/8117/getting-city-border-from-osm-data – 2013-03-27 13:03:49

+0

我只想得到所有的拉特城市在一个查询中。我认为nominatim有这种能力,但我不知道如何使用它。 – user2189557 2013-03-27 13:44:53

回答

2

我花了刺伤用JavaScript在这里做这样的: https://github.com/pgkelley4/city-boundaries-google-maps

基本上它归结为寻找relation是OpenStreetMap的商店在城市边界的。

我用类似下面的查询,以获得区域:

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的关系: http://overpass-api.de/query_form.html

也就是说如何让城市边界,处理它们则是另一回事如:

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

你可以在这里测试一下查询,雷也许可以改进在关系中没有任何事情。对于这个看到我的GitHub项目和: http://wiki.openstreetmap.org/wiki/Relation:multipolygon/Algorithm

另外我会注意到城市边界的OpenStreetMap数据是参差不齐的。从我所知道的大城市如达拉斯和洛杉矶,这是缺失的。

+0

看起来他们自2013年以来增加了洛杉矶。达拉斯仍然失踪,但Forth Worth和其他周边城市都在那里。 参见:http://www.openstreetmap.org/relation/207359 – 2015-03-12 19:29:11