开放街图 - 按城市分类的街道

3
我正在开发一个基于从OSM(Open Street Map)收集的数据的系统。
当我从OSM数据库中获取覆盖许多城市的区域时,我有没有办法找出哪条街道(来自庞大的xml列表)属于哪个城市?尝试使用OSM服务器端脚本,但在那个手册中没有找到我的兴趣点。
看起来我可以取任何(地址)节点属于的路,并解析它以从中获取街道名称和城市名称。但是真正的问题是有些街道没有地址节点。因此,看起来我有一组广泛的街道、城市,但无法确定哪些街道属于哪些城市?
我很乐意阅读任何有用的答案。
1个回答

6
您可以使用overpass api下载整个城市。首先,您应该找到定义城市的关系的ID(如果您的系统中没有它,可以通过overpass api查询)。例如,Vuppertal的ID为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"/>

您可以使用该 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"/>

如果您想更加严格筛选,可以添加更多的过滤条件,例如:如果您只关注德国,可以添加"de:place=city",或者"admin_level= something"等等。如果您希望获取更多结果,可以仅使用名称:

   <query type="relation">
     <has-kv k="name" v="Wuppertal"/>
   </query>
   <print mode="body"/>

关于“城市”的定义,这取决于您的看法。


你如何查询Overpass API中一个城市的关系ID? - James Chevalier
我最近发现了http://nominatim.openstreetmap.org/...您可以搜索城市,单击其“详细信息”链接,OSM关系ID位于顶部部分。不过,我仍在寻找它的API端点。 - James Chevalier
如果有遗漏,请考虑接受答案或进行评论。 - gorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接