如何获取德国A95高速公路全程限速值及起止坐标?
获取德国A95高速公路限速路段的起止坐标及限速数据
你当前的查询返回中点坐标是因为::lat/::lon在way的CSV输出中默认取几何中心。要提取每个限速路段的起止坐标,需要结合way的节点数据来处理,以下是调整后的Overpass API查询代码:
[out:csv(maxspeed, conditional, wet, length, start_lat, start_lon, end_lat, end_lon)] [timeout:500]; // 定位巴伐利亚州区域 area["ISO3166-2"="DE-BY"]->.a; // 筛选A95高速公路的motorway路段 way(area.a)["highway"="motorway"]["ref"="A 95"]; // 获取路段对应的所有节点数据 out body; >; out skel qt; // 遍历每个路段,提取起止坐标及相关数据 foreach ->.w( node(w.w)[0]->.start_node; node(w.w)[-1]->.end_node; make length = length(w.w); out csv( w.w.maxspeed, w.w.conditional, w.w.wet, length, .start_node.lat, .start_node.lon, .end_node.lat, .end_node.lon ); );
代码说明:
- 通过
foreach遍历每一段A95的高速路,分别抓取路段的第一个节点(起点)和最后一个节点(终点)的经纬度 - 保留了你需要的
maxspeed、conditional、wet标签输出,覆盖常规限速和雨天/时段等条件限速场景 - 自动计算每个路段的长度,替代原查询中的
convert逻辑 - 输出的CSV会直接包含每个限速段的起止坐标、限速值及条件信息
补充提示:
如果遇到同一个路段内存在多段限速的情况(比如OSM中用maxspeed:segment标签标记分段限速),这种场景需要更复杂的节点遍历逻辑,但OpenStreetMap中大部分高速限速段都是拆分为独立way存储的,上述代码可以覆盖绝大多数情况。
内容的提问来源于stack exchange,提问作者caro
相关产品推荐
相关产品推荐

