如何从OpenStreetMap中找到交叉点?

时间:2012-09-03 02:34:32

标签: intersection openstreetmap

如何在OpenStreetMap中提取交叉点?我需要交叉点的经度和纬度,谢谢!

3 个答案:

答案 0 :(得分:5)

有一个类似的问题here。没有直接的API调用来检索交叉点。但是您可以在给定的边界框中查询所有方式(例如直接通过API或通过Overpass API),并查找由两个或更多方式共享的节点,如另一个答案中所述。

答案 1 :(得分:3)

尝试使用GeoNames findNearestIntersectionOSM API: http://api.geonames.org/findNearestIntersectionOSMJSON?lat=37.451&lng=-122.18&username=demo

输入是lng和lat的位置,响应包含最近交点的lng和lat:

{"intersection":{...,"lng":"-122.1808293","lat":"37.4506505"}}

GeoNames提供,但似乎基于OpenStreetMap

答案 2 :(得分:0)

正如@scai完美解释的那样,您必须自己处理原始OSM数据以找到交叉点节点

您可以先使用OverpassAPI尝试不同的算法,而不是编写自己的程序。

  • 根据您感兴趣的方式,添加不应计入 regv 属性的交集方式(在两个脚本部分)。可以在此处找到方法类型:highway tags
  • BoundingBox是您在Overpass-tourbo网站上查看的地图的一部分。
  • 该脚本基于another question's reply中的脚本链接,但我重写了它以使其更具可读性并添加了评论(在此处和原始回复中)。

示例脚本:

<!-- Only select the type of ways you are interested in -->
<query type="way" into="relevant_ways">
  <has-kv k="highway"/>
  <has-kv k="highway" modv="not" regv="footway|cycleway|path|service|track"/>
  <bbox-query {{bbox}}/>
</query>

<!-- Now find all intersection nodes for each way independently -->
<foreach from="relevant_ways" into="this_way">  

  <!-- Get all ways which are linked to this way -->
  <recurse from="this_way" type="way-node" into="this_ways_nodes"/>
  <recurse from="this_ways_nodes" type="node-way" into="linked_ways"/>
  <!-- Again, only select the ways you are interested in, see beginning -->
  <query type="way" into="linked_ways">
    <item set="linked_ways"/>
    <has-kv k="highway"/>
    <has-kv k="highway" modv="not" regv="footway|cycleway|path|service|track"/>
  </query>

  <!-- Get all linked ways without the current way --> 
  <difference into="linked_ways_only">
    <item set="linked_ways"/>
    <item set="this_way"/>
  </difference>
  <recurse from="linked_ways_only" type="way-node" into="linked_ways_only_nodes"/>

  <!-- Return all intersection nodes -->
  <query type="node">
    <item set="linked_ways_only_nodes"/>
    <item set="this_ways_nodes"/>
  </query>
  <print/>
</foreach>