一文带你了解城市多维网络自动化建模神器Urbanity提供代码和数据

城市是一个复杂的生命体,城市网络则是这个生命体的骨架。城市网络分析逐渐成为了我们把脉城市的重要方法,城市网络分析科学也逐渐成为了一个热门研究方向。现代城市网络分析在各个层面上都在重新定义我们对城市空间的理解和构建方法,无论是在细致入微的交通流量预测,还是在编织复杂的社交网络图谱上。

在城市网络分析研究领域内,研究者广泛利用地理信息系统(GIS)、网络分析工具(例如NetworkX和OSMnx)、机器学习以及数据挖掘算法,致力于深入解析城市结构并提高其功能效率。具体应用上,这些工具在优化交通流、增强紧急事件响应能力、推进社会网络分析以及辅助城市规划和土地使用决策制定方面,已经取得了令人瞩目的成就。

尽管如此,当关注到实施层面,这些方法亦暴露了一些局限性。例如,依托NetworkX所进行的大规模网络分析可能会因其在处理巨型网络数据时的速度缓慢和对高性能计算资源的高度依赖而受限。OSMnx虽然在处理和分析路网数据方面展现出色,却难以扩展至其他类型的空间数据处理,从而限制了城市网络研究的广度与深度。针对现代城市所面临的众多挑战,亟待开发出更加集成、用户友好且能够高效处理大规模数据集的工具。这些工具不仅要能够精确地处理与分析复杂网络数据结构,还应具备将研究结果以清晰、直观的方式呈现,辅助研究人员和规划者精确把握城市运行现状,以制定科学合理的城市发展策略。

在此背景下,新加坡国立大学城市分析实验室开发的Python软件包Urbanity代表了一个前沿的创新跃进。该软件包所展现的核心创新并不仅仅局限在单一的功能或技术上,它的独特之处在于它如何巧妙地综合现有技术,提出一种全新的方法论,来适应和解析城市网络的复杂性。以下概述了Urbanity的几项核心创新:

  1. 细粒度网络构建:Urbanity利用高分辨率地理数据源来构建极其详细的城市网络,这种精确度无前例地反映了包括包括但不限于各种类型的POI和AOI,例如公共设施、绿地,建筑物在内的综合城市结构。

  2. 数据集成与融合:Urbanity的设计显著地能够无缝融合多种城市数据源,如土地使用、建筑信息、交通模式、人口统计和环境指标,大幅度提升了对城市网络动态及其相互作用的理解。

  3. .用户友好的分析平台:Urbanity提供的是一个用户友好的界面,该界面旨在降低城市分析的专业门槛,促进了更广泛的用户参与和利用。

  4. 机器学习和深度学习集成:Urbanity融合先进的机器学习和深度学习算法,这些算法深度挖掘城市数据,识别模式,预测城市发展趋势,尤其在处理复杂与非线性城市问题时表现出独特的优势。

  5. 跨尺度分析能力:Urbanity在微观的街道水平到宏观的城市甚至国家层面都展现出卓越的分析性能,为比较不同城市网络,识别局部和全局趋势提供了可能。

  6. 调整能力与模块化设计:Urbanity的架构能够灵活适应研究需求变化,可根据特定目标进行定制和模块化改进,从而持续适应城市研究领域中持续演化的问题。

  7. 计算和资源效率:Urbanity在处理庞大城市网络数据时展现出优异的计算效率,使得即使在资源受限的环境中也能够顺畅运行。

  8. 可视化与交互性:Urbanity的先进可视化工具为分析结果提供了直观的图表和地图,加强了决策支持系统的直观性和交互性。

Urbanity的上述创新特性使其在土地利用规划、应急管理、公共交通规划及城市设计等多个关键领域展现出广泛的适用性。城市规划者可依托Urbanity直接输入城市名称,即可获取城市POI和用地类型等数据,从来深入分析土地利用模式以识别发展机遇,不再需要像其他网络分析工具一样处理数据;应急管理专业人员能通过模拟灾难情况下交通流的动态来制定周密的疏散计划;城市设计师可以利用这一工具集成的机器学习功能预测不同设计方案对交通流、空气质量等关键指标的潜在影响,促使城市环境更加宜居和可持续。Urbanity的推出不仅赋予了已有工具以新的功能和视角,而且在当前城市网络研究这一挑战性领域中引领了更智能化、精准化的发展方向。

本文将详细介绍Urbanity的主要功能及其如何扩展传统城市网络分析的边界。本文还将提供使用Urbanity分析来自新加坡市的城市网络数据集,并展示该工具在探究城市绿化环境差异和城市道路类别上的分析能力。通过这些案例,我们将深入探讨城市网络作为一个复杂系统的理解,并讨论Urbanity在当前的局限性和未来发展潜力。


一、Urbanity基本功能介绍

这个部分主要是向大家介绍Urbanity包的主要功能。包括以下的内容用户如何与地图对象交互自定义研究区域

1、安装包和导入Urbanity

在安装和导入包的时候,大家要注意一下自己的python环境是否是3.8-3.10,否则可能无法运行urbanity。并且需要在运行的根目录下提供相应的data文件夹。8a2227445c13a1ad586f584e88194e13.jpeg

2、创建底图

当使用Urbanity的基本地图类时,它是基于ipyleaflet库构建的。ipyleaflet是一个交互式地图可视化库,提供了强大的地图绘制和控制功能。当用户实例化一个Map对象时,该对象会自动加载一些预设的配置项。这些配置项包括:

(1)地图图层(Layers):地图图层用于显示不同的地理数据或信息。预加载的配置项可以包括背景图层、标记点、多边形区域等。这样,用户在创建Map对象后,即可立即查看特定的地图图层。

(2) 绘制工具(Draw):绘制工具允许用户在地图上进行绘制操作,例如标注位置、划定区域等。预加载的配置项可以包括绘制工具栏以及与之相关的选项和样式设置。这样,用户可以直接开始使用绘制功能,而无需手动添加或配置绘制工具。

(3) 底图控件(Basemap Controls):底图控件用于切换不同的底图类型,如街道地图、卫星影像、地形图等。预加载的配置项可以包括底图切换按钮、缩放级别控制等。这样,用户可以轻松切换不同的底图,以适应其需求或偏好。

(4) 通过预加载这些配置项,Urbanity的基本地图类使用户能够快速开始使用地图,并且可以直接访问这些功能,而无需手动设置或编写复杂的代码。这提供了便利性和灵活性,使用户能够更轻松地探索和操作地图数据。

Urbanity在后台将地点名称与国家中心点连接起来(这里的国家需要urbanity支持的国家)。我以新加坡为例。Map类接受一个国家名称(例如“新加坡”),并自动将地图缩放到新加坡。用户可以指定更改缩放级别。1815841507e83e5449d09181746bcbf1.jpeg

3、设定研究区域

方法1:

我们可以使用一种快速、直观且简单的方法来指定空间范围,可以通过交互式地图面板左侧的绘图功能来实现。填充的正方形和多边形对象提供了最直观的方式来实现此功能。当最初在没有任何绘图的情况下调用该函数时,该函数会提示用户开始在地图上绘图。需要注意的是,该函数仅支持绘制有效的多边形(无交叉点或孔),并且目前仅支持一个多边形。该show参数可以切换为 True(默认为False)以显示链接的地图窗口。下面,我们尝试运行该add_bbox方法而不在地图上绘制任何内容。8181820ccbe70cd821051bb32e71a3f9.jpeg
添加完范围之后,再次运行代码,我们所绘制的范围就会被保存下来。c735b4b1187ef34a526c4b8910dbc36a.jpeg

344fd6bf553b967b46fd0d1e4cdbd335.jpeg


我们下面查看和绘制一下我们绘制边框的几何性质。1c98b1f2999307ce7a82b983badd362c.jpeg

方法2:

我们可以导入自定义的shapefile或者geopandas文件。这种情况是当我们需要研究特定的范围,比如某个城市某个街区时,我们无法通过在在线交互的方式直接绘制,导入我们所需的边框范围更为合适。下面,我将会以新加坡的CBD丹戎巴葛区(如下图所示)为例给大家演示如何把我们所需的范围导入到urbanity中去。a949ca3741d9bfd129e024766ae81f0d.jpeg
首先我们还是将urbanity的地图范围缩放到新加坡。96e690248ca75d9026612da9c21834df.jpeg
我们加载丹戎巴葛(Tanjong Pagar)的shapefile,把这个shapefile链接到我们的已经加载完毕的地图m2上去,使用add_polygon_boundary这个方法。09fd0d29fe7afa0950736f80d9ae5e3a.jpeg
和方法一相似的,我们所加载进去的shapefile同一可以进行可视化,来查看是否加载正确。同时这里需要提醒大家一点,所有加载到地图中的文件需要和开放街区地图的坐标系保持一致,也就是WGS84坐标系。9c5a6a63372381990d75112aea190f00.jpeg

三、Urbanity构建城市网络

上面我们介绍了如何选择我们需要研究的范围,下面我们来介绍如何Urbanity来构建城市网络,这也是Urbanity的核心功能。我们还是以我们上面导入的丹戎巴葛地区为例向大家展示如何来构建这一地区的网络地图。

1、构建城市道路网络

我们使用get_street_network方法来实现,它将会返回三个对象:

  • 1.Networkx图形对象;

  • 2. 由图节点及其属性点及其属性组成的GeoDataFrame;

  • 3.图边的地理数据框及其属性。

5ddd04a2104cf80ee1b5a83b3df10d68.jpeg
我们只需要将地图的位置传入到该方法中去,Urbanity会自动的从OSM的数据库中下载我们需要的数据。下载的数据通常的范围是国家,因此我们指定的范围应该是我们研究的城市。这里由于新加坡既是一个国家又是一个城市,因此我这里将’Singapore’传递出来。对于其他的国家和地区,我们则需要去考虑国家与城市的关系比如我们要针对英国伦敦的分析,我们就需要把传入的参数改为"London"。

除此以外,该方法还可以下载类似于poi、人口、建筑行政等数据,大家可以根据需要自由调整。这里我们只下载了丹戎巴葛地区的街道数据。我们对我们下载好的数据进行简单的可视化。f3ca00cdcf6c5d1cfa77668a4f84a160.jpeg

2、构建对偶网路

除了构建简单的城市网络,城市分析中还会使用对偶或是边缘网络。它们常用于空间句法。与上文构建的以街道为边,路口为节点的城市网络相反。对偶网络是以街道为点,路口为边的网络。与上文的街道网络相比,对偶网络更关注的是城市网络的连通性和可达性方面。Urbanity提供了一种自动连接真实世界城市网络的对偶图的方法。7d63069a682c2afffc3ec8b542abfc1f.jpeg
同样的,下载完的数据,对其进行可视化。如下图所示。d39b48bc8a8c398f3e1822919aad3815.jpeg

四、基于Urbanity,研究新加坡绿化隔离程度

Urbanity 的输出可用于各种复杂的网络分析任务。本部分将演示了如何使用图结构和网络上下文属性来可视化和分析城市绿化隔离程度。网络同质性是一种衡量一对一对节点之间相似程度的指标,类似于我们熟悉的皮尔逊相关系数,不同之处在于所考虑的配对是共享边缘的邻接节点对。简单的来说网络同质性衡量了通过边界连接的相邻节点对之间的相似性。网络同质性的取值范围从分散性(-1)到关联性(+1)。这个指标可以用来理解城市之间相邻地块网络绿化率是如何相似或不同的。例如,如果网络节点往往与其相邻邻居具有相似的值,则网络将具有正相配性。另一方面,如果高值倾向于放置在低值旁边,那么网络将表现出负配型。这种衡量标准直观地对应于城市隔离的衡量标准,我们感兴趣的是价值观如何从一个地点到另一个地点的变化。

1、生成 h3(六边形)网格

在我们开始之前,我们首先安装H3,一个uber开源包,来绘制不同空间分配率的六边形。6122abba10719522ea137feb2dabfb7c.jpeg
加载新加坡shapefile文件10c1279354523c4837d80b8e5b09d058.jpeg99b7f299f2c0af39f38cdad449394567.jpeg
通过这个简单代码,我们构建出新加坡边界的六边形网格。使用plot()看一下新加坡空间六边形网格。b22dd64bd7be601ffcdbfc4369607f80.jpeg
要使得我们所构建的六边形网格能够和我们之后导入的geojson数据能够进行融合。我们需要把六边形数据转换为GeoDataFrame,这里我们才能够进行空间数据之间的链接。4166828c48c8684a73acea290c4dda01.jpeg632e692bc6d5a67183a264382ed4d8e8.jpeg

2.加载网络节点和边缘信息。

加载了全球城市网络(Global Urban Network, GUN)数据集中的新加坡100米节点属性和边属性。接着,通过使用from shapely.geometry import LineString导入LineString类,我们将边的几何信息转换为LineString对象。34ab1f6a087c3c9b3b957f1015b1d5f3.jpeg
转换为几何信息要素之后我们发现,我们只提取我们需要的信息绿化率和空间的geometry。2b54251ccd039634c05c1ecd990a5b2a.jpeg

3.查找节点和边与每个相应的六边形网格单元的空间相交

我们将我们构建好的新加坡城市网络边数据与我们之前构建的基于新加坡城市边界的六边形网格进行相交。cac6467cba9c019d6a08619381b84e0c.jpeg
为了更清晰地展示每个六边形ID与多少条边相交,我们可以通过显示每个hexid组的相交边的数量来实现。以下是前五个和后五个条目的示例。a34ae1078c966a84499263181e69996c.jpeg
如上所示,有一些六边形格网只与两条边相交。这对结果的解释是一个问题,因为观测计数的数量太小可能无法给出稳健的数值。后面我们将看到,我们可以通过过滤观测计数低于给定计数阈值(例如30)的六边形格网来解决这个问题。现在,城市网络的节点信息含有绿化率的信息。首先,我们创建一个 python 字典,将 osmid 映射到它们的绿色视图值。我们在下面显示前五行。14891f1a841e9f432bf39c02b2b3945d.jpeg
我们设置好映射字典后,现在可以通过循环遍历我们的网络边缘,在一个简单直接的方式下将起始节点和结束节点的绿化视野添加到我们的hex_intersection数据框中。我们通过根据osmid从osmid_to_value字典中查找它们的值,并为hex_intersection数据框创建新的列来实现这一点。我们可视化修改后的数据框,并注意到增加了两个列:u_Green View stdev和v_Green View stdev。2750c6ac18d53a22ff4bbbd8a06b74dc.jpeg

4.计算六边形网格单元内的网络分类

完成所有数据预处理后,剩下的就是计算每个六边形网格的相邻节点对之间的网络同质性。该过程很简单,只需一行代码即可实现。此外,我们指定min_periods=30参数以确保省略边数小于的六边形网格。小于 30的网格和标准差为零的网格(例如,绿化视野为零的难以到达的区域)将报告为NaN值。预处理的最后一步涉及将我们的相关信息与hex_gdf之前创建的六边形几何数据框合并。我们已经可以可视化最终的图,并了解六边形网格之间的网络相配性值有何不同。注意:白色空单元格对应于与任何网络边缘没有交叉的六边形网格(例如,新加坡的中央集水区没有道路。)别忘记,画完之后我们图形进行一下美化。825bd1e7c10bcb0f85c8e54637238c5a.jpeg

887f09ac783b9e2fcb316a8776a7fffc.jpeg


根据我们的绘制的图像,新加坡的城市绿化隔离总体上是平衡的,这反映了城市国家在早期规划工作中取得的成功。新加坡的城市规划以公园城市的概念为基础。公园城市是指将大量绿地、公园和自然景观纳入城市设计的理念。通过在城市中融入丰富的绿化空间,新加坡成功地打造了一个平衡发展的城市环境。新加坡的成功经验证明了公园城市概念在城市规划中的重要性。通过将城市绿化与城市基础设施和社区发展相结合,新加坡实现了城市的可持续发展和居民的高生活质量。这是其他城市可以借鉴的一个积极例子。
需要注意的是,以上观点仅基于对数据的分析和我们的观察。如需进一步深入研究,可能需要进行更详尽的调查和分析来得出准确的结论。

五、结论

总结来说,Urbanity旨在从四个方面促进复杂城市网络研究的理论和实证巩固:

  • 1.协调正在进行的网络研究与传统规划理论;

  • 2.将当前的规划方法扩展到城市物理主义之外;

  • 3.探索与新兴的GeoAI领域的联系;

  • 4.完善城市网络实证评价的基准做法。

五、代码获取

对于本篇文章用到的代码和数据,请在公众号回复关键词 城市网络免费获取!

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值