获取主要城市所有交叉路口列表的最佳来源和方法是什么?
答案 0 :(得分:6)
如果不介意一些误报,下面的Overpass API脚本很容易从OpenStreetMap数据中获取道路交叉点:
(该脚本无法检测错误的交叉点 - 只有两条线相交,例如,当道路由OSM数据中的多路对象表示时)
如果脚本在此处脱机,则可以直接使用更易读的版本:
示例脚本:
<!-- 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数据来完成。
下载该城市的数据(使用导出链接:http://www.openstreetmap.org/export或从此处获取数据:http://metro.teczno.com/;还有其他来源,但这不是列出它们的地方)。
查找具有“高速公路”标记(http://wiki.openstreetmap.org/wiki/Key:highway)的适当值的所有元素。
对于每种方式,请获取构成它的节点ID。
创建一个数组,其中包含由高速公路信息(名称等)和节点组成的条目,每个节点一个。
对节点ID上的数组进行排序。它按节点对条目进行分组,以便具有重复节点的一组条目表示交集。
遍历数组,提取包含多个条目的每组条目,并在交叉列表中添加新条目。此时,您可以提取高速公路信息,以便可以通过在那里相遇的高速公路来描绘交叉路口。
这是一个简短的总结,我知道。但我知道它有效,因为它是我在地图渲染库中使用的系统,用于在创建路由数据时识别交叉点。