您的位置:

详解OSMnx:Python中的开源地理空间分析工具包

一、OSMnx概述

OSMnx是一个开源的Python地理空间数据可视化和分析工具包,基于OpenStreetMap数据源,可以用来分析城市的街道网络、生成全景地图等。使用OSMnx,你可以轻松获取城市的复杂路网和建筑结构。同时,OSMnx允许你使用不同的分析方法,如自行车网络的生成、确定分层路网等。这个工具包的优势在于,不必了解复杂的GIS或地理空间分析技术,就能快速的处理和可视化地理空间数据。

二、安装OSMnx

要安装OSMnx,首先需要确保你已经安装了Python和JupyterNotebook。打开Anaconda Prompt或命令行控制台,输入以下命令:

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

由于OSMnx包含大量的依赖关系,因此安装时可能需要一些时间。安装完成后,可以通过打开jupyter notebook来检验是否安装完成。新建一个notebook,输入以下代码,检查是否出错:

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA" #构建地点
graph = ox.graph_from_place(place_name)
ox.plot_graph(graph)

如果没有任何错误,查看你的Jupyter Notebook,你应该可以看到从OpenStreetMap下载的Piedmont, 加利福尼亚州的道路网络。

三、获取地理空间数据

在OSMnx中,获取地理空间数据的方法非常容易。最常用的方法之一是通过place名称获取道路网络。可以按以下方式执行代码来实现

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA" #构建地点
graph = ox.graph_from_place(place_name)
ox.plot_graph(graph)

OSMnx还允许我们根据坐标范围来获取道路网络。要获取地理空间范围,请按以下方式执行代码:

import osmnx as ox
ox.config(log_console=True, use_cache=True)
north, south, east, west = 37.79, 37.78, -122.41, -122.43
graph = ox.graph_from_bbox(north, south, east, west)
ox.plot_graph(graph)

除了道路网络,OSMnx还允许您获取建筑物、商店、运动设备等各种信息。以下是一些选择的示例代码:

# 获取建筑物和道路
G = ox.graph_from_point((37.79, -122.41), distance=750, network_type='all')
area = ox.project_gdf(ox.gdf_from_place('Berkeley, California'))
buildings = ox.buildings_from_place(place_name)
streets = ox.core.graph_to_gdfs(graph, nodes=False, edges=True, node_geometry=False, fill_edge_geometry=True)

# 获取购物点和其他点
poi2 = ox.pois_from_place(place_name, amenities=['restaurant'])

# 获取街道名
streets_names = ox.core.get_route_edge_attributes(graph, attribute='name')

四、生成具有地理意义的可视化图像

OSMnx提供了几种直接可视化图像的方法,其中最常用的 метод是plot_graph()。以下代码演示如何生成带有彩色道路和节点类型的图像。

import osmnx as ox
ox.config(log_console=True, use_cache=True)
place_name = "Piedmont, California, USA"
graph = ox.graph_from_place(place_name, network_type='drive')
fig, ax = ox.plot_graph(graph, node_size=0, edge_color=‘y’, edge_linewidth=0.5, show=False, close=False)
fig.canvas.draw()
ax.set_title(‘{} (drive network)’.format(place_name), fontsize=20)
plt.show()

可以看到我们绘制了一个拥有各种颜色的道路和点的图像。

五、分析网络结构

OSMnx对分析和可视化街道网络非常适用。以下是OSMnx提供的一些分析方法:

1. 分层路网

跨越多个交通模式的“图层”路网。如下所示,通过network_type参数值为all,OSMnx可以生成一个图层路网。

G_all = ox.graph_from_place(place_name, network_type='all')
fig, ax = ox.plot_graph(G_all, node_size=0)

2. 生成街区

使用graph_from_address()函数生成地址。此函数需要一个字符串地址作为参数,例如“1600 Amphitheatre Parkway, Mountain View, CA”。使用此功能,您可以生成指定地址周围的街区,如下图所示

import osmnx as ox
ox.config(log_console=True, use_cache=True)
address = '955 Westwood Blvd, Los Angeles, CA' #构建地点
G = ox.graph_from_address(address, dist=750, network_type='drive')
fig, ax = ox.plot_graph(G)
fig.savefig('images/los-angeles.png', dpi=300, bbox_inches='tight')

六、自行车路网分析

OSMnx包含了许多功能,可以生成不同类型的网络。在下面的代码段中,我们使用network_type=‘bike’将OSMnx配置为只找到自行车道路。然后,我们使用make_route_graph()函数来找到在两个点之间的最短自行车路线。

import osmnx as ox
ox.config(use_cache=True, log_console=True)
G = ox.graph_from_address('1118 26th St, Santa Monica, California', network_type='bike')
route = ox.shortest_path(G, "1118 26th St, Santa Monica, California”, “1832 11th St, Santa Monica, California”)

七、总结

OSMnx是一个用于地理空间数据的分析和可视化的强大工具箱。它为我们提供了许多特性,使我们能够方便地获取和分析地理空间数据。能够生成具有地理意义的可视化图像,生成街区和自行车路网分析。 如果您想开始自己的地理空间数据项目,OSMnx是您不可或缺的工具!