Fre*_*eek 5 python plot openstreetmap leaflet
全部,
我一直在研究全球所有山地车路线的索引。我是一个 Python 人,所以对于涉及的所有步骤,我尝试使用 Python 模块。
我能够从 OSM Overpass API 获取关系,如下所示:
from OSMPythonTools.overpass import Overpass
overpass = Overpass()
def fetch_relation_coords(relation):
rel = overpass.query('rel(%s); (._;>;); out;' % relation)
return rel
rel = fetch_relation_coords("6750628")
Run Code Online (Sandbox Code Playgroud)
我选择这个特定的关系 (6750628),因为它是导致不连续(或其他错误)绘图的几个关系之一。
我处理“rel”对象以获得 pandas.DataFrame,如下所示:
elements = pd.DataFrame(rel.toJSON()['elements'])
Run Code Online (Sandbox Code Playgroud)
元素 pandas.DataFrame 包含“relation”类型的行(本例中为 1)、一些“way”类型的行和许多“node”类型的行。据我了解,我将使用“关系”行、“成员”列来提取路径的顺序(指向节点),并使用该顺序创建节点的纬度和经度列表(以便稍后在传单中使用),按照正确的顺序,即导致地图上连续路径的顺序。
然而,事实并非如此。对于这种特定的关系,我最终得到以下图:
如果我们将其与openstreetmap.org本身显示关系的方式进行比较,我们会发现它出了问题(重点关注路径的中部、东部部分)。我有很多发生这种情况的例子,尽管也有很多关系确实显示正确。
所以我想知道,我错过了什么?是否有带有标签的节点需要忽略?我已经尝试了几件事,包括省略带有任何标签的节点,这没有帮助。我的处理在某个地方是错误的,但我不明白在哪里。
您需要自己对关系内部的方式进行排序。只有少数关系类型需要排序成员,例如一些路由关系,例如route=bus和route=tram。其他人可能有排序成员,例如等route=hiking,route=bicycle但他们不需要它们。各种其他关系,例如边界关系 ( type=boundary),通常没有排序成员。
我很确定已经有各种工具用于对关系成员进行排序,显然这包括 openstreetmap.org 网站,该网站可以正确显示此关系。不幸的是,我无法向您指出这些工具,但我想一点点研究就会揭示其他工具。
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |