Python+OSMnx+调用实例+代码(Openstreetmap边界路网下载+路径规划返回)

1安装
安装是OSMnx应用最难的一步。相比其他python包,OSMnx较难安装,以下为笔者安装经验:
①建议应用anaconda作为python开发环境。
conda install -c conda-forge osmnx
首先,可在Anaconda Prompt中键入以上代码尝试下载。若失败,参考以下内容。
②建议创建一个虚拟环境安装OSMnx。详细步骤如下:
conda create -n osmnx_env python=3.7 #创建版本为3.7的虚拟环境
activate osmnx_env #激活虚拟环境
conda config --prepend channels conda-forge #添加安装镜像源
conda install osmnx #开始正式安装

2调用
检验安装成功第一步,调用。
import osmnx as ox

3各级别边界获取
1)例:澳大利亚新南威尔士州行政边界获取:
在这里插入图片描述
实现代码:
city = ox.gdf_from_place(‘New South Wales’)
ox.plot_shape(ox.project_gdf(city))
2)例:悉尼市行政边界获取:
在这里插入图片描述

实现代码:
city = ox.gdf_from_place(‘Sydney’)
ox.plot_shape(ox.project_gdf(city))
3)例:广州市天河区行政边界获取:
在这里插入图片描述

实现代码:
city = ox.gdf_from_place(“广州市天河区”)
ox.plot_shape(ox.project_gdf(city))

4保存数据到本地
OSMnx提供三种文件保存格式:ESRI Shpfile,osm以及graphml。
以最常用的shpfile为例:
ox.save_gdf_shapefile(“city.shp”)
(保存路径一般为代码所在文件夹)

5道路数据获取
道路数据获取方法有三种:以上为根据坐标范围进行获取(graph_from_bbox),其次还可以根据地名进行检索(graph_from_place),根据地址进行检索(graph_from_address)。道路类型也有三种可供获取:行车道路(network_type = ‘drive’),可骑行道路(network_type = ‘bike’)与步行道路(network_type = ‘walk’)。

1)例:根据坐标范围获取深圳市全市可骑行道路数据:
在这里插入图片描述

实现代码:
G = ox.graph_from_bbox(22.9837, 22.1365, 114.976, 113.3487, network_type = ‘drive’)
G = ox.project_graph(G)
ox.save_graph_shapefile(“深圳市可骑行道路.shp”)
ox.plot_graph(G)

2)例:根据地名检索获取以广州大学为中心,半径1.5km范围内的所有道路:
在这里插入图片描述

对比百度地图:
在这里插入图片描述

细致的高校内部小路也能获取,可见OSMnx质量。
实现代码:
G = ox.graph_from_address(“广州大学”, distance = 1500, network_type = ‘all’)
ox.plot_graph(G)
ox.save_graph_shapefile(“全国排名第100高校周边道路.shp”)

Arcmap软件查看下载数据:
在这里插入图片描述
广州市珠江新城周边道路
在这里插入图片描述
广州大学城周边道路

6路径规划
例:广州大学校门-中山大学校门路径规划
先来看百度地图的检索结果:
模式选择步行,因为我们后面OSMnx获取的数据为可步行道路。百度地图选择的最佳路径长度是5.2km。
在这里插入图片描述

OSMnx运行结果:
①首先以广州大学为中心,获取方圆5km的步行道路数据;
在这里插入图片描述

②首先输入广大与中大校门坐标作为OD,获得路径规划结果;
在这里插入图片描述

放大显示:
在这里插入图片描述

③输出规划路径的长度(默认单位为米)
在这里插入图片描述

④对比结果
在这里插入图片描述

百度地图路径规划长度为5.2km(左图),使用OSMnx的路径规划长度为5.224km(右图),虽推荐路径不一,但最短距离结果较为一致。

实现代码:
import osmnx as ox
import networkx as nx
G = ox.graph_from_address(“广州大学”, distance=6000,network_type=‘all’) #第一步,获取道路数据
ox.plot_graph(G)
origin_point = (23.039506,113.364664) #广州大学校门坐标
destination_point = (23.074058,113.386148) #中山大学校门坐标
origin_node = ox.get_nearest_node(G, origin_point) #获取O最邻近的道路节点
destination_node = ox.get_nearest_node(G, destination_point) #获取D最邻近的道路节点
route = nx.shortest_path(G, origin_node, destination_node, weight=‘length’) #请求获取最短路径
distance = nx.shortest_path_length(G, origin_node, destination_node, weight=‘length’) #并获取路径长度
fig, ax = ox.plot_graph_route(G, route, origin_point=origin_point, destination_point=destination_point) #可视化结果
print(str(distance)) #输出最短路径距离

提示:
若进行大量OD计算,编写循环结构即可。

OSMnx路径规划优缺点:
优点:路径规划不需注册,无配额限制,而著名地图API路径规划一般每天限额几千次,要进行大规模研究时可适当考虑。
缺点:图商的路径规划通常会考虑到实际交通情况,但OSMnx做不到,只能考虑物理几何最短路径,高精度分析需求时需注意这一点。
注意:OSM系列数据不能用于涉及我国国境线的地图表达,须遵守法律法规,使用正确、合法的数据。

  • 12
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值