当前位置: 首页 > news >正文

利用OSMnx进行城市路网数据的速度与通行时间推算及分析

本文还是以广州市路网为例,通过osmmx调用ox.add_edge_speeds(G)时,该函数会遍历图G 中的每条边(即每条街道),并基于一些预设的规则或街道属性(如街道类型、是否为主要道路、是否有速度限制等)来估算车辆在这条街道上行驶的平均速度。然后,这个速度值会被添加为边的属性,命名为 ''speed_kph''(表示速度,单位为公里/小时),并增加"travel_time"(表示通行时间,单位为秒)。

完整代码#运行环境 Python 3.11

# 导入osmnx库,用于处理地理空间数据和网络分析
import osmnx as ox# 定义地点名称,这里是广州市,位于中国广东省
place_name = "guangzhou, Guangdong, China"# 使用osmnx的graph_from_place函数,根据地点名称下载并构建该地区的街道网络图
G = ox.graph_from_place(place_name)# 为图G中的边添加速度信息。如果边缺少速度数据,osmnx会尝试根据道路类型自动估计速度
G = ox.add_edge_speeds(G)# 根据已添加的速度信息,计算图中每条边的预估旅行时间(以秒为单位)
G = ox.add_edge_travel_times(G)# 将图G转换为GeoDataFrame,仅包含边的信息(不包含节点)
# GeoDataFrame是geopandas库中的一种数据结构,专为地理空间数据设计
edges = ox.graph_to_gdfs(G, nodes=False)# 确保'higwhay'列的数据类型为字符串,以便后续的分组操作
edges["highway"] = edges["highway"].astype(str)# 对不同道路类型进行分组,并计算每种类型道路的平均长度、平均速度(千米/小时)和平均旅行时间(秒)
# 使用.round(1)对结果进行四舍五入,保留一位小数
grouped_stats = edges.groupby("highway")[["length", "speed_kph", "travel_time"]].mean().round(1)# 将处理好的街道网络图G保存为GeoPackage格式的文件,文件保存路径为"E:/data/guangzhou_network.gpkg"
ox.save_graph_geopackage(G, filepath="E:/data/guangzhou_network.gpkg")

导入ArcGISpro进行展示,并以speed作为颜色分级标签,分级方法选择''自然间断点分段法'',分了5个层级;

分级结果如图所示;

可以发现核心区的道路限速还是比较严重的,最畅通的还是高速公路;

引用summary_stats 这个变量对路网速度进行分类汇总,通过对 edges_gdf 这个GeoDataFrame进行分组和聚合操作得到的。edges_gdf 包含路段信息,包括它们所属的highway类型(如高速公路、主干道、次干道等)、每条边的speed_kph(速度,单位:公里/小时)和travel_time(通行时间)。

具体的分组和聚合操作如下:

  1. 分组(groupby):通过''highway''列进行分组,意味着会将所有具有相同''highway''值的行(即边)归为一组。

  2. 聚合(agg):对每个分组执行聚合操作。这里对''speed_kph''列计算了平均值''mean'',表示该''highway''类型下所有边的平均速度;同样地,也对''travel_time''列计算了平均值,但需要注意,这个平均值可能不是直接基于实际测量得出的旅行时间,而可能是基于某种假设或计算得出的。

  3. 四舍五入(round(1)):最后,将计算出的平均速度和平均旅行时间四舍五入到小数点后一位。

完整代码#运行环境 Python 3.11

import osmnx as ox
import pandas as pd  # 新增导入pandas库用于数据处理和导出Excel
import matplotlib.pyplot as plt# 设置下载和分析的城市地点
place_name = "guangzhou, Guangdong, China"# 下载并构建指定城市的街道网络图
G = ox.graph_from_place(place_name)# 为图中缺失速度信息的边添加默认速度数据,依据道路类型进行估算
G = ox.add_edge_speeds(G)# 根据每条边的速度数据,计算并添加预估的旅行时间(以秒为单位)
G = ox.add_edge_travel_times(G)# 将原始地理坐标系下的图投影到UTM坐标系,这一步骤便于进行距离相关的计算
G_projected = ox.project_graph(G)# 将投影后的图转换为只包含边信息的GeoDataFrame,GeoDataFrame是geopandas库中用于处理地理数据的数据结构
edges_gdf = ox.graph_to_gdfs(G_projected, nodes=False)# 确保'highway'列的数据类型为字符串,便于接下来的分组操作
edges_gdf["highway"] = edges_gdf["highway"].astype(str)# 按照道路类型对边进行分组,并计算每种类型道路的平均速度(千米/小时)和平均旅行时间(秒),结果四舍五入到一位小数
summary_stats = edges_gdf.groupby("highway").agg({"speed_kph": "mean", "travel_time": "mean"}).round(1)
print(summary_stats)# 导出计算结果到Excel文件
# 指定导出的文件路径和名称
output_file = "Guangzhou_Road_Speeds_and_Travel_Times.xlsx"
# 将summary_stats DataFrame导出为Excel文件
summary_stats.to_excel(output_file, index=True)
print(f"数据已成功导出到 {output_file}")

导出的路网速度进行分类汇总xlsx结果如下;

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【.NET全栈】ASP.NET开发web应用——ASP.NET中的样式、主题和母版页
  • 今天此文堪比出师表最后一句话
  • Redis的中BitMap的应用
  • leetcode算法题(反转链表)
  • CentOS 7 Web面板的文件管理器说明
  • Kotlin Misk Web框架
  • 无人机之机架类型篇
  • AWS云计算实战:电商平台发卡机器人开发指南
  • N-(4-Azido-2-nitrophenyl)-N‘‘-biotinylnorspemidine
  • 在 Android 中定义和使用自定义属性
  • 在VS2017下FFmpeg+SDL编写最简单的视频播放器
  • 科研绘图系列:R语言金字塔图(pyramid plot)
  • Linux上启动和停止jar
  • 【C++】P10287 [GESP样题 七级] 最长不下降子序列 题解_动态规划dp_图论_拓扑排序_洛谷_算法竞赛
  • DeepSORT:高效对象跟踪算法
  • angular2开源库收集
  • emacs初体验
  • HomeBrew常规使用教程
  • If…else
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript的使用你知道几种?(上)
  • JavaScript设计模式之工厂模式
  • MySQL数据库运维之数据恢复
  • nodejs实现webservice问题总结
  • php面试题 汇集2
  • Python学习笔记 字符串拼接
  • react-native 安卓真机环境搭建
  • Redis的resp协议
  • 测试如何在敏捷团队中工作?
  • 后端_ThinkPHP5
  • 今年的LC3大会没了?
  • 聚类分析——Kmeans
  • 浅谈Golang中select的用法
  • 如何优雅地使用 Sublime Text
  • 实现简单的正则表达式引擎
  • 树莓派 - 使用须知
  • 我看到的前端
  • 源码安装memcached和php memcache扩展
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​什么是bug?bug的源头在哪里?
  • ​水经微图Web1.5.0版即将上线
  • ​虚拟化系列介绍(十)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $.proxy和$.extend
  • (1)虚拟机的安装与使用,linux系统安装
  • (Note)C++中的继承方式
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)JAVA使用POI操作excel
  • (翻译)terry crowley: 写给程序员
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET Core 实现 Redis 批量查询指定格式的Key