Osmnx,一个下载和分析 OpenStreetMap 数据的神奇Python库!
点击蓝字关注我们Osmnx:用Python玩转OpenStreetMap地图数据
Python搞地理信息分析有福啦!Osmnx这个库简直就是给咱们开发者准备的一把瑞士军刀,它让从OpenStreetMap下载和分析地理数据变得超easy。说实话,没有它我可能还在手动下载那些杂乱的地图数据呢…
1.
安装那些事儿
pip install osmnx
装这个库可能会卡一下下,别着急,它底层用到了不少地理信息相关的依赖。要是遇到报错,八成是缺了gdal或者rtree这些包,补装一下就好啦~
2.
下载地图数据有多简单
python
import osmnx as ox
1# 获取北京天安门周边的街道网络
2G = ox.graph_from_address('Tiananmen Square, Beijing, China', dist=1000)
4# 把地图画出来看看
5ox.plot_graph(G)
看到没,就这两行代码,北京天安门附近1公里的路网就到手了!这图里的点就是路口,线就是道路。酷不酷?
温馨提示:第一次下载可能会比较慢,建议挂个代理,不然容易超时。
3.
地图分析也不难# 基础统计信息
1stats = ox.basic_stats(G)
2print(f“路网总长度:{stats['street_length_total']:.2f}米”)
3print(f“路口数量:{len(G.nodes)}”)
5# 找最短路径
6origin = list(G.nodes())
7destination = list(G.nodes())[-1]
8route = ox.shortest_path(G, origin, destination)
这些数据都是现成的,想统计路网密度、计算两点之间最短路径,都不用自己写算法,库里全都给准备好啦~
4.
地图数据过滤很灵活# 只要主干道
1tags = {'highway':['primary', 'secondary', 'tertiary']}
2G_main = ox.graph_from_address('Tiananmen Square, Beijing, China',
3 dist=1000,
4 custom_filter=tags)
6# 要啥过滤啥
7places = ox.geometries_from_address('Tiananmen Square, Beijing, China',
8 tags={'amenity':'restaurant'},
9 dist=1000)
不光是道路,饭店、学校、公园这些地理要素也都能轻松获取。OpenStreetMap的标签系统特别强大,想要啥数据玩啥数据。
5.
存档和加载# 保存地图数据
1ox.save_graph_xml(G, filepath='beijing_roads.osm')
3# 读取已存地图
4G_loaded = ox.load_graphml('beijing_roads.osm')
下载的数据记得存到本地,下次用直接加载就好,省得重复下载浪费时间。
温馨提示:这些地图文件可能会比较大,存档前最好压缩一下。别忘了定期清理不用的数据,不然硬盘分分钟就满啦。
今天聊的这个Osmnx用起来贼爽,对地理数据分析感兴趣的小伙伴赶紧去试试。对了,趁着这会儿,赶紧动手实践一下,找个你感兴趣的地方,把它的地图数据下载下来玩玩~
点分享
点在看
点点赞
页:
[1]