Python OSMnx 从入坑到入土
没书读的铁憨憨
2021年10月14日 12:13

OpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。——百度百科(https://baike.baidu.com/item/Open%20Street%20Map/11057294)

OSMnx是Python包,构建在geopandas,networkx和matplotlib之上,可从OpenStreetMap的下载地理数据资源,并进行建模,投影,可视化和分析等。——知乎文章(https://zhuanlan.zhihu.com/p/307493408)

[写在前面] 本专栏均为Windows环境下的操作,其他系统建议自行查询官方文档。


1.安装conda

OSMnx建议使用conda进行安装,比较容易。这里使用的是Miniconda。前往官网(https://docs.conda.io/en/latest/miniconda.html)进行下载和安装。下图为2021年10月12日所截,具体版本参考图中文字。

Miniconda下载


2.安装OSMnx

避免麻烦,这里使用OSMnx1.1.1官方文档(https://osmnx.readthedocs.io/en/stable)中提出的方法,下载OSMnx包,创建名为ox的Python环境。这里的ox是环境名,如果想取其他名字,更改第二行代码即可,比如取名为osmnx_env,那么将其中-n ox修改为-n osmnx_env

代码块
Shell
自动换行
复制代码
conda config --prepend channels conda-forge
conda create -n ox --strict-channel-priority osmnx
复制成功

强烈建议使用上述方法进行安装,省事。


3.创建项目及导入环境

下面使用PyChram进行项目的创建和OSMnx的使用。没有PyChram的自行前往官网(https://www.jetbrains.com/pycharm/)进行下载安装,其中Community以及Educational(有条件)为免费版

新建项目,可自行命名。下方Python Interpreter选择Previously configured interpreter

创建项目-步骤1

先选择Conda环境,然后在Interpreter一栏找到前面创建的ox环境中的python.exe,具体如下:

创建项目-步骤2

正确选择后,下面的Conda executable会自动添加。然后点击OK->creat即可创建项目。

项目结构可根据需要自行修改。

创建文件(举例)


4.编码及运行

这里选取了这篇文章(https://blog.csdn.net/weixin_36772273/article/details/107736997)中的例子。由于OSMnx 1.1.1中对一些函数名和参数名等进行了修改,同时部分函数将在后续的版本中移除,因此修改之后的正确代码如下:

代码块
Python
自动换行
复制代码
import osmnx as ox
import networkx as nx

G = ox.graph_from_address('广州大学', dist=6000, network_type='all')  # 第一步,获取道路数据
ox.plot_graph(G)
origin_point = (23.039506, 113.364664)  # 广州大学校门坐标
destination_point = (23.074058, 113.386148)  # 中山大学校门坐标
origin_node = ox.nearest_nodes(G, origin_point[1], origin_point[0])  # 获取O最邻近的道路节点
destination_node = ox.nearest_nodes(G, destination_point[1], destination_point[0])  # 获取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)  # 可视化结果
print(str(distance))  # 输出最短路径距离
复制成功

然后运行,可以得到路网图以及两地最短路径图。

路网效果图

规划路径效果图(放大后)

以及求得最短路径长度:

最短路径长度


5.其他

比如

[1] PackagesNotFoundError: The following packages are not available from current channels [2] OSError: could not find or load spatialindex_c-64.dll [3] ValueError: check_hostname requires server_hostname

之类的问题,有读者遇到再补充吧~


最后,感谢您的时间!