Python 使用osmnx(openstreetmap)获取城市路网
Python 使用osmnx(openstreetmap)获取城市路网
OSmnx可以用于检索并可视化网络数据,将路段抽象成边,交叉口抽象为点。个人感觉它的功能十分强大,因为道路网络数据很庞大,使用这个库就可以将很多数据下载并进行处理,这个库让我觉得python数据处理是十分的方便。首先介绍osmnx库的下载,并浅尝osmnx获取道路网络。
1.osmnx库的安装
在此说明,我使用的是python3.8。
osmnx库依赖geopandas, matplotlib, networkx, numpy, pandas, pyproj, requests, Rtree, Shapely
先在python库网站https://www.lfd.uci.edu/~gohlke/pythonlibs/下载Rtree, Shapely库,
并pip-intall Rtree pip-install Shapely
最后pip –install osmnx
2.使用osmnx获取城市路网
可以通过向 OSMnx 提供以下任何一项来下载街道网络(在下面的示例中进行了演示):
- 一个边界框
- 一个经纬度点加上一段距离
- 地址加距离
- 所需街道网络边界的多边形
- 地名或地名列表
您还可以指定几种不同的网络类型:
- 'drive' - 获得可驾驶的公共街道(但不是服务道路)
- 'drive_service' - 获得可驾驶的公共街道,包括服务道路
- 'walk' - 获取行人可以使用的所有街道和路径(这种网络类型忽略单向方向性)
- 'bike' - 获取骑自行车者可以使用的所有街道和路径
- 'all' - 下载所有(非私有)OSM 街道和路径
- 'all_private' – 下载所有 OSM 街道和路径,包括私人访问的
a)使用osmnx.graph.
graph_from_place获得道路网络,利用城市名
import osmnx as ox import matplotlib.pyplot as plt streets_graph = ox.graph_from_place('Los Angeles, California', network_type='drive')#address:Los Angeles城市名,California streets_graph = ox.projection.project_graph(streets_graph) streets = ox.graph_to_gdfs(ox.get_undirected(streets_graph), nodes=False, edges=True, node_geometry=False, fill_edge_geometry=True) f, ax = plt.subplots(figsize=(10, 10)) streets.plot(ax=ax, linewidth=0.2) ax.set_axis_off() plt.show()
结果为:
b)来自多边形osmnx.graph.
graph_from_polygon
的街道网络
G
=
ox.graph_from_polygon(mission_shape, network_type
=
'drive'
)
ox.plot_graph(G)
c)来自地址ox.graph_from_address的街道网络,这将获得帝国大厦 1 公里(沿网络)内的街道网络:
import osmnx as ox G = ox.graph_from_address('350 5th Ave, New York, New York', network_type='drive') ox.plot_graph(G)
结果为:
d)经纬度点的街道网络
这将获得距离经纬度点(37.79, -122.41),0.75 公里(沿网络)内的街道网络:
import osmnx as ox G = ox.graph_from_point((37.79, -122.41), dist=750, network_type='all') ox.plot_graph(G)
结果为:
e)来自边界框的街道网络
osmnx.graph.
graph_from_bbox
(north, south, east, west, network_type='all_private', simplify=True, retain_all=False, truncate_by_edge=False, clean_periphery=True, custom_filter=None)
import osmnx as ox G = ox.graph_from_bbox(37.79, 37.78, -122.41, -122.43, network_type='drive') G_projected = ox.project_graph(G) ox.plot_graph(G_projected)
结果为:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)