获取城市中所有交叉路口的列表

时间:2012-10-18 23:07:40

标签: google-maps maps openstreetmap google-places-api google-places

获取主要城市所有交叉路口列表的最佳来源和方法是什么?

2 个答案:

答案 0 :(得分:6)

如果不介意一些误报,下面的Overpass API脚本很容易从OpenStreetMap数据中获取道路交叉点:

http://overpass-turbo.eu/s/QD

(该脚本无法检测错误的交叉点 - 只有两条线相交,例如,当道路由OSM数据中的多路对象表示时)

如果脚本在此处脱机,则可以直接使用更易读的版本:

  • 根据您感兴趣的方式,添加不应计入 regv 属性的交集方式(在两个脚本部分)。可以在此处找到方法类型:highway tags
  • 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>

答案 1 :(得分:3)

您可以使用OpenStreetMap数据来完成。

  1. 下载该城市的数据(使用导出链接:http://www.openstreetmap.org/export或从此处获取数据:http://metro.teczno.com/;还有其他来源,但这不是列出它们的地方)。

  2. 查找具有“高速公路”标记(http://wiki.openstreetmap.org/wiki/Key:highway)的适当值的所有元素。

  3. 对于每种方式,请获取构成它的节点ID。

  4. 创建一个数组,其中包含由高速公路信息(名称等)和节点组成的条目,每个节点一个。

  5. 对节点ID上的数组进行排序。它按节点对条目进行分组,以便具有重复节点的一组条目表示交集。

  6. 遍历数组,提取包含多个条目的每组条目,并在交叉列表中添加新条目。此时,您可以提取高速公路信息,以便可以通过在那里相遇的高速公路来描绘交叉路口。

  7. 这是一个简短的总结,我知道。但我知道它有效,因为它是我在地图渲染库中使用的系统,用于在创建路由数据时识别交叉点。