【技术教程】探索城市街道网络的奇妙世界:OSMnx引领复杂系统研究(提供代码)

1. 前言

当我们面对日益复杂的城市现象时,如何理解和研究城市的相互关系和影响就变得尤为重要。城市复杂系统(Complex Urban Systems)是指由各种相互关联和相互作用的因素组成的城市系统。这些因素包括人口、交通、建筑、环境、经济活动等多个层面。城市复杂系统的特点是非线性、动态和自适应性,其各个组成部分之间存在复杂的关系和相互影响,它们是用来理解和研究城市的相互关系的利器。

城市复杂系统研究的一个重要工具是网络科学(网络科学是研究网络结构、拓扑、连接性和信息流动等的学科领域)。通过分析城市中的网络结构、连接性和信息流动,可以揭示城市空间结构、交通流量、社交网络等方面的特征和规律。此外,基于大数据和智能技术的城市模拟和可视化方法,也为城市复杂系统的研究提供了强大的支持。

OSMnx就像是城市街道网络的魔法导航,它是一个强大的Python工具,能够帮助我们从一团杂乱的地理数据中提取出精美的街道图,并为我们揭示城市的隐藏秘密。

想象一下,当我们打开OSMnx时,它就像一位聪明的地理学家,开始将OpenStreetMap的数据转化为一个令人目瞪口呆的网络图。通过这个神奇的转换过程,我们可以看到城市中无数街道之间错综复杂的联系,仿佛一张脉络清晰的巨网展现在我们眼前。OSMnx不仅仅是一种图形展示工具,它还运用了最前沿的网络科学原理和方法,帮助我们深入探索街道网络的内涵。它用度中心性、介数中心性、聚类系数等指标,解读街道网络的结构特点和关键节点,就好像给每个街道都贴上了“重要”、“繁忙”或者“交通拥堵”的标签。

OSMnx提供的最短路径算法更是城市里的一把钥匙,让我们轻松找到两个位置之间最快捷的路线。它就像是一个聪明的导游,带领我们穿越迷宫般的街道,让我们省去了迷失方向和浪费时间的烦恼。不仅如此,OSMnx还可以模拟交通流量,就像是在城市中搭建了一套微观交通网络。通过这个模型,我们可以预测拥堵情况、优化路径规划,甚至为城市交通规划提供重要参考。

通过将网络科学的精髓融入OSMnx的功能,我们能够以前所未有的方式认识城市街道网络。它揭示了城市的脉络和联系,让我们更好地理解街道网络的特性、功能和效率,为我们的城市生活带来更多的便利和智慧。无论你是城市规划师、交通工程师还是对城市感兴趣的探索者,以下将利用OSMnx都是你不可或缺的得力助手,带你进入城市网络的奇妙世界!


2. 利用 OSMnx 进行街道网络分析

2.1 导入OSMnx

2.1.1 导入必要的 Python 模块:

图1 Python 模块

这些OSMnx使用所依赖的模块都有什么作用呢?Matplotlib是一个强大而灵活的数据可视化工具,可以创建各种类型的图表,如折线图、散点图、柱状图、饼图等,帮助我们更好地理解和展示数据;NetworkX是一个功能丰富的软件包,用于研究和分析各种类型的网络,如社交网络、生物网络、交通网络等。它提供了一系列算法和函数,用于计算网络的属性、查找路径、可视化等,有助于我们深入理解和分析网络结构和特性;IPython是一个交互式计算环境,可以实现代码编辑、执行和展示结果的交互式操作。它提供了一系列特性,如代码补全、代码注释、历史记录、富文本输出等,使得编写和调试Python代码更加方便和高效。同时,IPython也是Jupyter环境的核心组件,为Jupyter提供了强大的交互性和可扩展性;Pprint是一个用于"漂亮地打印"Python数据结构的模块。它可以将复杂的数据结构以易读的形式输出,并支持对输出结果进行格式化和定制。Pprint的使用可以使我们更方便地查看和理解Python数据结构,提高代码的可读性和调试效率。

2.1.2 安装和导入 OSMnx 本身,对其进行配置,并显示其版本号:

图2 OSMnx配置

OSMnx配置的操作,使得大家能够快速地读取到数据,并且将数据保存在本地。

2.1.3 使用 OSMnx 下载加利福尼亚州皮埃蒙特的街道网络,构建它的图形模型(通过 NetworkX),然后使用该matpoltlib绘制网络。

图3 皮埃蒙特街道网络结构

当然我们也可以以同样的方式绘制上海外滩道路网络结构。

 图4 上海外滩道路网络结构

在上两幅图中,图形的节点显示为白色,道路显示为灰色。下面我们选择主要使用加利福尼亚州皮埃蒙特的街道网络,因为它是一个相对较小的、独立的城市,方便我们进行可视化和指标计算。请注意,我们这里选择的都是城市的机动车道路,还可以下载城市的自行车和步行道路。只需要更改network_type的类型即可(OSMnx数据是基于Osm开发地铁的,可能会存在数据缺失如下图所示)。

 图5 数据缺失的上海外滩道路部网络结构

2.2 计算网络指标

现在我们有了网络模型,可以计算一些统计数据和指标。首先,我们的网络覆盖多大的面积(以平方米为单位)?为了计算面积,我们需要对图形进行投影,并将其投影节点转换为 Geopandas 的 GeoDataFrame,然后,在欧几里德平面中,计算这组节点点的凸包的面积即可。(凸包(Convex Hull)是一个凸多边形,它将一组点包围在内部,并且任意两个点之间的连线都完全位于凸包内部或边界上。凸包面积指的是这个凸多边形的表面积。)

图6 计算网络指标

这个网络大约覆盖了4.2平方公里的区域。在绘制图表时,OSMnx默认使用通用横轴墨卡托投影坐标系统,并根据网络的质心自动确定UTM投影的区域。我们可以定义其他坐标参考系统来自定义这种投影行为,使其更加灵活多样。也许,到这里同学们还没有深刻地感受到OSMNx的强大之处,下面我们通过一行代码,直接了解我们整个网络的一些基本信息。

图7 网络基本信息

我们可以看到这个网络有346个节点(n)和938条边(m)。街道回路(circuit)的平均值1.1(circuity_avg)。平均街段长度为116米(street_length_avg)。由于许多指标的结果很冗长,OSMnx还提供特定的指标计算方法。比如我们需要计算街道回路的平均值,我们可以用下面的代码,其他特定值的计算也是类似的。

图8 计算街道回路

此外,Osmnx生成的街道网络图是支持Newworkx包下计算的相关指标的。在街道网络计算中常用到的指标如下:

  • 平均邻居度指标是指每个节点邻域中节点的平均度数。
  • 中心性指标(介数、接近度、度数和PageRank)确定每个节点在网络拓扑结构中的“中心”或重要程度。
  • 聚类系数指标表示一个节点的邻域形成完全图的程度。
  • 网络的离心率(每个节点到其他所有节点的最大距离)、直径(网络中的最大离心率)、半径(网络中的最小离心率)、中心(所有离心率等于半径的节点集合)和外围(所有离心率等于直径的节点集合)。

我们尝试用代码来计算一下接近度的最大值,来检验一下OSMnx生成的网络是否能够很好地支持networkx的相关计算。

图9 计算接近度

我们已经对街道网络进行了建模,并计算了其几何和拓扑的各种指标,我们可以将我们的图形保存到本地,通过OSMnx的’save_graph_shapefile’,作为ESRI shapefile或GraphML文件(一种用于图形序列化的开源格式),以便在其他GIS或网络分析软件中方便使用。

图10 保存图形

我们打开Arcgis,看一下我们导入完成的文件。

 图11 导入完成的文件

2.3 可视化街道中心性

从OSMnx这个名字,我们可以很明显地看出它是由两个部分组成的:一部分是OSM,也就是大名鼎鼎的Open street map开放街区地图,是一个完全开源免费的地图;另外一个部分是Nx,也就是我们上文提到Networkx,是由洛斯阿拉莫斯国家实验室开发(美国国家实验室)的强大网络分析包。我们可以使用它计算可视化网络中不同街道的接近中心性。接近中心性衡量节点或边在网络中的中心程度,定义为节点/边与网络中所有其他节点/边之间的距离加权最短路径之和的倒数。

我们将图转换为折线图,它颠倒了它的拓扑定义,使得街道成为节点,交叉点成为边。然后我们计算每个节点的接近中心性(即折线图中的街道):

图12 节点转换和计算

现在我们已经计算了网络中每条街道的中心性,我们通过 OSMnx 的函数使用 Matplotlib 对其进行可视化,使用 Inferno 色带以亮黄色表示最中心的街道和深紫色表示最不中心的街道:plot_graph

图13 街道可视化

2.4 网络路径(寻找最短路径)

OSMnx允许研究人员和从业者使用各种最短路径算法计算路线并模拟沿网络的行程。例如迪杰斯特拉(Dijkstra)算法,这里我们还是使用加利福尼亚州皮埃蒙特为例。街道中任意两点为例。

图14 最短路径算法 

接下来,我们使用按长度(即沿街道网络的几何距离)加权的 Dijkstra 算法计算这些起点和目的地节点之间的最短路径。然后我们使用 OSMnx 沿网络绘制此最短路线的路径,如下图所示:

图15 绘制最短路径

不止如此,我们还可以计算一些最短路径一些统计数据,比如总长度(以米为单位)也就是这到这两个点要行驶5km的距离。

图16 最短路径计算

2.5 其他下载/构建网络的方式

到目前为止,我们已经对加利福尼亚州皮埃蒙特的街道网络进行了建模和分析。但是,我们不限于我们的学习地点。OpenStreetMap是一个全球地图项目,OSMnx可以对世界任何地方的网络进行建模,例如中国深圳:

图17 中国深圳街道网络

这里需要说明OSM对国内的地名匹配不是特别准确,建议使用我们之前使用的数据框(上海的例子)。

我们已经了解了如何使用OSMnx的函数下载街道网络数据并将其转换为基于图形的模型。此函数使用 OpenStreetMap 的 Nominatim Web 服务对地名进行地理编码,识别其边界多边形,然后从 OpenStreetMap 的API 下载此多边形内的所有网络数据。

除此以外,我们还可以使用缓冲区的方法获取道路边界。比如我们以加州大学伯克利分校的规划系主楼。我们获取这个地方的经纬度(37.870605, -122.254830)。

图18 加州大学伯克利分校的规划系主楼

OSMnx 还接受地点查询作为明确的 Python 字典,以帮助地理编码器在多个名称可能大致重叠时找到特定的匹配研究站点。在此示例中,我们通过使用以下字典定义查询来下载江苏南京的街道网络:

图19 江苏南京的街道网络

前面的所有示例都侧重于城市和郊区街道网络。但是,OSMnx 还可以通过参数传入自定义查询来下载和建模其他网络基础结构类型。此类网络基础设施可能包括纽约市地铁的铁路基础设施,也就是说你只要打开OSM看到的东西OSMnx基本上都可以下载,如以下示例所示:

图20 自定义查询下载

了网络基础设施之外,OSMnx还可以处理OpenStreetMap建筑物占用空间和兴趣点数据。例如,我们可以下载并可视化纽约帝国大厦附近的建筑足迹:

图21 帝国大厦附近的建筑足迹


3. 结论

OSMnx项目的魅力在于它们为城市规划学科和相关分析领域带来了无数优点,就好像给研究人员提供了一把强大而多功能的工具。OSMnx结合Jupyter、Notebook不仅令城市科学的各种问题变得可重复、可复制、可共享和可重新混合,还能将数据分析与可视化和叙述相结合,以解决各种城市问题。

作为一个城市规划师,我们可以想象这种OSMnx对我们工作的巨大影响。在规划和分析城市发展时,我们可以使用并通过OSMnx简单的代码实现复杂的数据分析和可视化。我们可以通过编写代码来处理和分析大量的城市数据,如人口统计、交通流量、土地利用等。这些代码将与文字说明相结合,使甲方能够跟随着我们的思路,了解每个步骤的原理和目的。

总之,这种OSMnx为城市规划师提供了一个强大的工具,使我们能够更好地展示和传达我们的研究成果、分析方法和规划方案。它们不仅促进了透明度和理解,还为城市规划领域的合作和创新提供了新的可能性。


4. 代码获取

评论区回复 代码1 获取本文章的代码!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值