lyh20050329 发表于 2024-11-29 10:16:29

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]
查看完整版本: Osmnx,一个下载和分析 OpenStreetMap 数据的神奇Python库!