hello 大家好!
最近遇到一堆关于街道数据分析的问题,又不想去使用百度和高德的API,有的功能还是得付费,为了学习不想掏钱,那么有什么办法么?
答: 有!必须有!今天给大家分享一个很旧的python 库--osmnx
首先一段简介:
OSMNx 是一个下载街道数据、建模、可视化、分析街道数据的,通过OpenSteetMap API抓去街道数据,还能下载POI,建筑,海拔等等。需要的依赖库包括geopandas,networkx,matplotlib。
1. 安装
那么,我们第一步应该做什么呢?当然是先安装python。
可能有很多和我一样的小伙伴,最开始的时候安装完了就被劝退了。
最直接的方式就是去python官网。Welcome to Python.org 很多小伙伴们喜欢使用anaconda,其实都差不多。anaconda的环境配置可能会有些蛋疼,因为以后安装其他库的时候不会有不兼容的情况,反复删除和修改库的配置会是个很麻烦的事情。
安装成功了以后cmd或者terminal输入python就会出现上面的状况。那么恭喜,安装成功!,一般也不会失败,这里记住一个事情:
一定要add to path!!!
一定要add to path!!!
一定要add to path!!!
否则以后调用库就会出问题!
如何add to path:
如图,在系统变量中添加python安装的路径中的scripts文件夹然后保存就可以了。
接下来,就是安装osmnx库。
pip3 install osmnx
如果一切正常的话,那么恭喜你,顺利安装成功了。如果不顺利,不用灰心。
可能出现错误的是fiona和gdal 出现问题,那么,请移步到这个网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 搜索对应版本的库,例如
下载对应python版本的独立的库,然后,
pip3 install wheel
wheel是一个python自带的安装whl文件的安装器。
接下来就到下载路径中安装刚下好的包,以fiona为例
我的python版本是3.8 64位系统,那么对应的fiona就是红色的部分。
pip3 install Fiona-1.8.17-cp38-cp38-win_amd64.whl
这样就安装好了,只要等待一下,就安装好了。依次类推,找到哪些无法自动安装的库,然后自行下载。为了避免麻烦,python3.8之后 出现了一个新的状态,可以这样操作,比如
pip3 install osmnx --use-feature=2020-resolver
这样,这个库的依赖库就都可以是最合适的版本。还是减少了一些时间成本。上述步骤无论是Windows mac或者linux 都可以这样操作
当库都安装好了以后,就可以进入正题了:我们来体验一下osmnx到底能干啥
2. 开始使用
使用之前,不知道小伙伴们都用什么ide,个人推荐新手使用jupyter notebook/lab。这两个工具的特点就是轻量化
import networkx as nx
import osmnx as ox
import requests
import matplotlib.cm as cm
import matplotlib.colors as colors
%matplotlib inline
ox.config(use_cache=True, log_console=True)
ox.__version__
这个就是调试一下osmnx,并调用其他一些库,
接下来我们来看看如何爬取城市的街道数据
# get a graph for some city
G = ox.graph_from_place('Shenyang, Liaoning, China', network_type='drive')
fig, ax = ox.plot_graph(G)
以沈阳为例,等待时间取决于电脑的网速,等其它客观因素,然后voala
我们就这样直接爬出了路网!国内城市,也可以爬取!基本上就是城市,省份,国家这样的顺序。
接下来还可以计算城市路网基本特征
# some basic stats about the network
ox.basic_stats(G_proj, area=graph_area_m, clean_intersects=True, circuity_dist='euclidean')
还可以借助networkx 库来计算城市道路网络的一些复杂网络特征
ox.basic_stats(G_proj, area=graph_area_m, clean_intersects=True, circuity_dist='euclidean')
接下来看点酷炫的--中心性可视化
临近中心性越高的地方越黄。
# convert graph to line graph so edges become nodes and vice versa
edge_centrality = nx.closeness_centrality(nx.line_graph(G))
nx.set_edge_attributes(G, edge_centrality, 'edge_centrality')# color edges in original graph with closeness centralities from line graph
ec = ox.plot.get_edge_colors_by_attr(G, 'edge_centrality', cmap='inferno')
fig, ax = ox.plot_graph(G, edge_color=ec, edge_linewidth=2, node_size=0)
今天先给大家介绍到这里!如果大家喜欢后续会继续分享更多osmnx 的内容!