迭代.osm文件并为每个元素调用提供的回调函数
osm-iterator的Python项目详细描述
此代码加载.osm文件并允许对数据集中的所有osm对象调用函数。
安装
pip install osm-iterator
它以osm_iterator
pypi包的形式分发。
用法示例
from osm_iterator.osm_iterator import Data
def show_places(element):
place_tag = element.get_tag_value("place")
name_tag = element.get_tag_value("name")
osm_object_url = element.get_link()
if place_tag != None:
print(name_tag + " is an object " + osm_object_url)
osm = Data("file.osm")
osm.iterate_over_data(show_places)
运行测试
nosetests3
或python3 -m unittest
历史记录
设计说明:这段代码对几乎所有事情的处理都非常次优。首先,将所有数据加载到内存中,然后创建重复的内存数据集。
因此,尝试处理任何大型数据集都会由于内存消耗过多而导致问题
这种情况是以下事实的结果
- 这段代码是在我第一次尝试使用python处理osm数据时编写的
- api允许(至少在理论上)轻松地切换到真正的迭代器,该迭代器不会一次将所有数据加载到内存中
- 到目前为止,这对我来说已经足够好了,所以我没有动力花时间改进那些不是瓶颈的东西
不过,如果有人有改进的好主意(特别是以工作代码的形式),则欢迎使用注释和拉取请求。