5

How to extract intersections in the OpenStreetMap? I need the longitude and latitude of the intersections, thanks!

4

3 回答 3

5

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

于 2012-09-03T13:38:31.483 回答
5

尝试 GeoNames findNearestIntersectionOSMAPI: 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

于 2015-08-04T10:16:22.213 回答
1

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

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

  • 根据您感兴趣的方式,将不应该算作交集的方式类型添加到regv属性(在两个脚本部分)。可以在这里找到方式的类型:高速公路标签
  • BoundingBox 是您在 Overpass-tourbo 网站上查看的地图的一部分。
  • 该脚本基于另一个问题回复中的脚本链接,但我重写了它以使其更具可读性并添加了评论(包括此处和原始回复)。

示例脚本:

<!-- 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>
于 2018-04-24T09:43:38.227 回答