Osmnx 是一个用于从 OpenStreetMap 获取、建模、分析和可视化地理空间街道网络的 Python 库。以下是一份较为全面的 Osmnx 教程:
1. 安装
可以使用 pip
进行安装:
pip install osmnx
也可以使用 conda
进行安装:
conda install -c conda-forge osmnx
2. 基本使用流程
2.1 导入必要的库
import osmnx as ox
import matplotlib.pyplot as plt
2.2 获取街道网络数据
- 按地点名称获取:可以通过提供一个地点名称(如城市名)来获取该区域的街道网络。
# 获取北京市的街道网络
place_name = "北京市"
G = ox.graph_from_place(place_name, network_type='drive')
这里的 network_type
参数可以指定网络类型,常见的取值有 'drive'
(行车网络)、'walk'
(步行网络)、'bike'
(自行车网络)等。
- 按经纬度边界框获取:通过指定经纬度的边界框来获取特定区域的街道网络。
# 定义边界框
north, south, east, west = 34.0522, 34.0422, -118.2437, -118.2537
G = ox.graph_from_bbox(north, south, east, west, network_type='walk')
2.3 可视化街道网络
# 绘制街道网络
fig, ax = ox.plot_graph(G)
plt.show()
这将使用 matplotlib
库绘制出获取到的街道网络图形。
2.4 分析街道网络
- 计算网络的基本统计信息:
stats = ox.basic_stats(G)
print(stats)
这些统计信息包括节点数量、边数量、平均节点度、网络密度等。
- 最短路径分析:
# 随机选择两个节点
import random
nodes = list(G.nodes())
origin_node = random.choice(nodes)
destination_node = random.choice(nodes)
# 计算最短路径
route = ox.shortest_path(G, origin_node, destination_node)
# 绘制最短路径
fig, ax = ox.plot_graph_route(G, route)
plt.show()
3. 其他高级功能
3.1 获取特定类型的地理要素
除了街道网络,Osmnx 还可以获取其他类型的地理要素,如公园、学校等。
# 获取北京市的公园
tags = {'leisure': 'park'}
gdf = ox.geometries_from_place(place_name, tags)
# 可视化公园
gdf.plot()
plt.show()
3.2 保存和加载数据
- 保存数据:可以将获取到的街道网络保存为图形文件或地理数据文件。
# 保存为 GraphML 文件
ox.save_graphml(G, filepath='beijing_street_network.graphml')
# 保存为 GeoPackage 文件
ox.save_graph_geopackage(G, filepath='beijing_street_network.gpkg')
- 加载数据:
# 从 GraphML 文件加载数据
G_loaded = ox.load_graphml('beijing_street_network.graphml')
4. 注意事项
- 网络请求:Osmnx 会从 OpenStreetMap 服务器请求数据,因此需要确保网络连接正常。同时,要注意遵守 OpenStreetMap 的使用条款,避免过度请求。
- 数据更新:OpenStreetMap 数据是动态更新的,因此不同时间获取的数据可能会有所不同。
- 内存使用:对于大规模的区域,获取和处理街道网络数据可能会占用大量的内存,需要注意内存管理。
通过以上步骤,你可以使用 Osmnx 进行地理空间街道网络的获取、分析和可视化等操作。你可以根据自己的需求进一步探索 Osmnx 的其他功能。