打开街道地图 - 按城市划分的街道

dbq*_*dbq 2 geolocation openstreetmap


我正在开发一个基于从OSM(Open Street Map)收集数据的系统.

当我(从OSM数据库)获取覆盖多个城市的区域时,我是否有办法找出哪条街(来自庞大的xml列表)属于哪个城市?试图使用OSM服务器端脚本,但没有找到我对该手册的兴趣点.

看起来我可以采取属于该方式的任何(地址)节点并解析它以从中获取街道名称和城市名称.
但真正的问题是,有些街道没有地址节点.所以看起来我有一大堆街道,城市,但是无法决定哪条街道属于哪个城市?

我很乐意阅读任何有用的答案.

gor*_*orn 5

您可以使用立交桥api下载整个城市.您应该首先找到定义城市的关系的id(如果您的系统中没有它,您可以通过overpass api查询它).例如,Vuppertal有62478.然后将3600000000添加到id并发送以下POST请求到http://www.overpass-api.de:

<union>
  <area-query ref="3600062478"/>
  <recurse type="node-relation" into="rels"/>
  <recurse type="node-way"/>
  <recurse type="way-relation"/>
</union>
<print mode="body"/>
Run Code Online (Sandbox Code Playgroud)

您还可以使用theis api检查各个点所属的城市下载街道的位置,有关详细信息,请参阅

更新:要查找城市关系,请将以下POST请求发送至http://overpass-api.de/api/interpreter:

   <query type="relation">
     <has-kv k="name" v="Wuppertal"/>
     <has-kv k="type" v="boundary"/>
   </query>
   <print mode="body"/>
Run Code Online (Sandbox Code Playgroud)

如果你想要限制更多,你可以添加更多的过滤器,如de:place = city如果你只看Germanz或admin_level = something等.如果你想得到更多的结果,你只能使用这个名字:

   <query type="relation">
     <has-kv k="name" v="Wuppertal"/>
   </query>
   <print mode="body"/>
Run Code Online (Sandbox Code Playgroud)

这取决于你,你认为"一个城市"是什么.