基于OpenStreetMapPython接口(OSMnx)的GIS数据获取与网络分析教程(附代码注释)
【你投稿了没?10万+作者“平台好才是真的好”,也许下一个就是你!】(点击看详情),是由城市数据派主办的征稿活动,小派在此恭候派友们投稿分享!
【本期看点】
相信OpenStreetMap是大家熟悉的老朋友了,这回本文为大家介绍的是OSM的新朋友——OSMnx:OpenStreetMap的python拓展包(OSMnx)简介与入门操作教程。
科研写论文用到行政边界数据?交通可达分析在找细致的路网数据?需要获取分不同情景的步行道路、骑行道路、驾驶道路?还是路径规划面临庞大数据量和API极小配额的尴尬?......强大的OSMnx通通可以解决!
本期投稿
作者:高枫
广州大学地理科学学院
GIS专业硕士研究生
研究方向为地理大数据与城市研究
(共享单车相关的时空行为研究)
爱好GIS,平平无奇
什么是OSMnx
OSMnx是由南加大规划系的Geoff Boeing教授编写的OpenStreetMap的python拓展包。
参考官网:https://geoffboeing.com/
参考文献:
OSMnx可以实现什么
科研写论文用到行政边界数据?交通可达分析在找细致的路网数据?需要获取分不同情景的步行道路、骑行道路、驾驶道路?还是路径规划面临庞大数据量和API极小配额的尴尬?......
强大的OSMnx通通可以解决!可通过少量代码实现以下功能: (1)世界范围内各级边界获取;(若涉及我国界线必须使用国家审查有资质的数据)(PS. 你能认出下面哪个边界是国内的吗?hhhh)
(2)世界范围内道路获取
(3)路径规划
等等...
OSMnx有何优势
1. 区域不限,全球各国各地均可操作;2. 道路数据可分场景获取,包括驾驶,骑车与步行道路;3. 路径规划功能无需注册,且无限额(awsl...)。
OSMnx的简易入门教程
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 ox3.各级别边界获取(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系列数据不能用于涉及我国国境线的地图表达,须遵守法律法规,使用正确、合法的数据。
期待合作
商业合作、投稿等,请联系客服微信号,加好友必须备注:合作+姓名
更多服务
学习了,谢谢大佬分享
页:
[1]