如何从.osm xml文件中提取关系成员

2024-06-26 01:39:47 发布

您现在位置:Python中文网/ 问答频道 /正文

全部,

我一直在尝试建立一个网站(在Django),这是一个索引的所有MTB路线在世界上。我是Pythonian,所以无论我在哪里,我都会尝试使用Python

我已经成功地从OSMAPI(Display relation (trail) in leaflet)中提取了数据,但发现对所有MTB轨迹(tag:route=MTB)这样做的数据太多(处理需要很长时间)。因此,我尝试在本地下载整个OpenStreetMap数据集的种子(从Latest Weekly Planet XML File),并使用osmfilter(Ubuntu 20.04中osmctools的一部分)过滤tag:route=mtb,如下所示:

osmfilter $unzipped_osm_planet_file --keep="route=mtb" -o=$osm_planet_dir/world_mtb_routes.osm

这将生成一个大约1.2GB的文件,仔细检查,它似乎包含了我需要的所有数据。我的目标是将该文件转换为pandas.DataFrame(),以便在将相关方面推送到Django数据库之前可以进行进一步的过滤和转换。我试图使用Python将该文件作为常规XML文件加载,但这使Jupyter笔记本内核崩溃。我想数据太大了

我的第二种方法是这个解决方案:How to extract and visualize data from OSM file in Python。这对我来说很有效,至少,我可以获得一些信息,比如文件中关系的标记(以及其他指定的细节)。我缺少的是关系成员(路径),然后是路径成员(节点)及其纬度/经度。我需要这些来实现我在这里所做的:Plotting OpenStreetMap relations does not generate continuous lines

我对许多解决方案持开放态度,例如,可以使用基于锇的脚本将文件分解为多个不同的文件,每个文件包含一个关系及其成员。也许那时我可以继续学习pandas.read_xml()。这对于填充数据库的批处理很好。将整个OSM XML文件加载到pd.DataFrame中会很好,但我想这确实是大量数据。也许这也可以通过pyosmium在每个关系的基础上完成

感谢您的帮助


Tags: 文件数据djangoin关系osmtag成员