Python OSMnx入坑指南

文章目录

  • 前言
  • 一、安装conda
  • 二、安装OSMnx
    • 1.官方方法
    • 2.个人走弯路
  • 三、使用
  • 参考文献

前言

前言空着

一、安装conda

这里使用的是Miniconda,从这个网站下载安装即可。个人使用的是Windows 64-bit版。
Python OSMnx入坑指南_第1张图片

二、安装OSMnx

1.官方方法

参考OSMnx 1.1.1文档

conda config --prepend channels conda-forge
conda create -n ox --strict-channel-priority osmnx

一步到位,完成安装,在Pycharm中选择该conda环境即可使用。
具体先这样选:
Python OSMnx入坑指南_第2张图片
然后这样选:
Python OSMnx入坑指南_第3张图片
就可以创建项目使用了。(下面弯路就可以不看了)

2.个人走弯路

有时间再补充,逃

三、使用

该部分使用的例子来源于这篇文章

由于OSMnx 1.1.1中对一些函数名和参数名等进行了修改,同时部分函数将在后续的版本中移除,因此修改之后的正确代码如下:

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))  # 输出最短路径距离

效果图如下(有点丑):
Python OSMnx入坑指南_第4张图片
看了下文档,地图的颜色、线条粗细可以通过在plot_graph,
plot_graph_route中加入参数进行修改。


运行代码时,可能遇到以下错误:
OSError: could not find or load spatialindex_c-64.dll

这个问题比较有意思,引起的原因是osmnx所依赖的geopandas包需要导入rtree包引起。这个问题在GitHub的这个issue中进行了讨论,最后geopandas的开发人员表示这是rtree的问题,让你自己碰运气,他也无能为力。
Python OSMnx入坑指南_第5张图片
解决方法:

  1. 从conda-forge安装时,要确保使用严格的通道优先级,避免混合来自PyPI和conda的包。(geopandas的开发人员所提)
conda config --env --add channels conda-forge
conda config --env --set channel_priority strict

删除rtree包后重新安装以确保它选择了底层的C库。

  1. 选择尝试安装pygeos,在这种情况下不使用rtree。(geopandas的开发人员所提)
  2. 降低rtree版本,使用0.9.4之前的版本(其他使用者提出,可能有效)。
conda install -c conda-forge rtree=0.9.3
  1. 参考这篇文章提出的方法,修改源码,这里我修改的方式与他不一样。具体问题如下:rtree/finder.py中的load函数中下图这个地方始终无法将路径加入候选,这里我直接将这个判断条件删掉,默认加入这一路径,问题得到解决。
    Python OSMnx入坑指南_第6张图片
_candidates.append(os.path.join(sys.prefix, "Library", "bin"))

参考文献

  1. https://docs.conda.io/en/latest/miniconda.html
  2. https://osmnx.readthedocs.io/en/stable/index.html
  3. https://blog.csdn.net/weixin_36772273/article/details/107736997
  4. https://github.com/geopandas/geopandas/issues/1812
  5. https://blog.csdn.net/weixin_42545675/article/details/115725416

你可能感兴趣的:(python,pycharm,OSMnx)