利用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结果如下;

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46726.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang | Leetcode Golang题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; func lowestCommonAncestor(root, p, q *TreeNode) (ancestor *TreeNode) {ancestor rootfor {if p.Val < ancestor.Val && q.Val < ancestor.Val {ancestor ancestor.Left} else if p.Val > ancestor.Val && q…

十五、【文本编辑器(一)】代码框架

目录 一、QMainWindow基本构成 二、项目框架代码 三、菜单与工具栏的实现 四、总结 一、QMainWindow基本构成 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏 (menu bar)&#xff0c;多个工具栏(tool bars)&#xff0c;多个锚接部件 (dock widgets…

最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具

一。世界最受欢迎的采样器的新篇章 Native Instruments Kontakt是采样器领域的标准&#xff0c;您将获得高质量的滤波器&#xff0c;在这里您将找到经典的模拟电路和最现代的滤波器。每一个都可以根据您的口味进行定制&#xff0c;并且由于它&#xff0c;您可以获得前所未有的声…

debian12 允许远程ssh登录

1、查看ssh服务是否在运行 systemctl status ssh 如果没有安装ssh服务&#xff0c;可以通过以下命令安装&#xff1a; apt install openssh-server 如果服务没有运行&#xff0c;通过以下命令重启ssh服务&#xff1a; systemctl restart ssh 2、编辑配置文件 vim /etc/ss…

DROO论文笔记

推荐文章DROO源码及论文学习 读论文《Deep Reinforcement Learning for Online Computation Offloading in Wireless Powered Mobile-Edge Computing Networks》的笔记 论文地址&#xff1a;用于无线移动边缘计算网络在线计算卸载的深度强化学习 论文代码地址&#xff1a;DR…

数组去重(去重+单调栈 用boolen instack来去重

如果存到一个小的就把比它大的都pop出去&#xff0c;在后面还有的情况下&#xff0c;如果后面没有就不pop了 class Solution {public String removeDuplicateLetters(String s) {Stack<Character> stacknew Stack<>();int[] countnew int[256];boolean[] inStackn…

泰迪智能科技江西大数据实验室成功案例介绍说明

高校大数据实验室作为作为支撑高校人培方案实施的核心设施&#xff0c;实验室的建设一定要与学科建设、人才培养充分融合&#xff0c;是一个包含物理空间硬件资源软件资源课程内容的系统化工程。高校在实验室规划过程中&#xff0c;第一要务就是从学科定位出发、结合学校的特色…

14_Shell重定向输入输出

14_Shell重定向输入输出 输出重定向&#xff1a;一般情况&#xff0c;输出是在终端直接显示&#xff0c;改变输出位置&#xff0c;改变到文件中&#xff0c;这就是输出重定向 输入重定向&#xff1a;一般情况&#xff0c;输入是读取用户终端输入&#xff0c;改变输入位置&#…

图解PyTorch中的Transpose操作

在PyTorch中&#xff0c;我们时常会对张量进行转置操作。若张量是二维的&#xff0c;则非常容易理解。若张量维度更高&#xff0c;则会令人摸不到头脑。 高维张量究竟是怎么转置的&#xff1f;简单来说&#xff0c;就是将参与转置的维度抽出来&#xff0c;将内侧的子张量视为一…

【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言

文章目录 Beginning1&#xff09;ASCLL 码2&#xff09;大小比较2&#xff09;判断数字字符3&#xff09;字符、数字间的相互转换End Beginning 在 C 中&#xff0c;字符和整数有着密不可分的关系。原因就是在计算机中&#xff0c;字符是以一种较 ASCLL 码的整数存储的。自然&…

职业PDF标准 Python 下载器-CSDN

目的 下载技能人才评价网 - 职业技能标准查询系统 - PDF 打包下载 使用文件 a.json 代码解析 import base64 import requests import json import os import time# 读取JSON文件 with open(a.json, r, encodingutf-8) as f:data json.load(f) # 从名为 a.json 的文件中读…

四川蔚澜时代电子商务有限公司领航抖音电商新纪元

在数字化浪潮的推动下&#xff0c;电子商务已成为现代商业发展的重要引擎。四川蔚澜时代电子商务有限公司&#xff0c;凭借对市场的敏锐洞察力和对技术的执着追求&#xff0c;成功在抖音电商领域崭露头角&#xff0c;成为众多电商创业者值得信赖的合作伙伴。 抖音&#xff0c;…

关系数据库:mysql

使用 mysqladmin 删除数据库 关系型数据库的术语&#xff1a; 数据库: 数据库是一些关联表的集合。数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。行&#xff1a;一行&#xff08;元组…

idea双击没有反应,打不开

问题描述 Error opening zip file or JAR manifest missing : /home/IntelliJ-IDEA/bin/jetbrains-agent.jar解决方案

前端路由手写Hash和History两种模式

文章目录 1. Hash模式&#xff1a;简洁而广泛适用2. History模式&#xff1a;更自然的用户体验3. 结论 在现代Web开发中&#xff0c;单页面应用&#xff08;Single Page Application&#xff0c;简称SPA&#xff09;因其流畅的用户体验和高效的页面交互能力而备受青睐。前端路由…

PyTorch人脸识别

新书速览|PyTorch深度学习与企业级项目实战-CSDN博客 一套基本的人脸识别系统主要包含三部分&#xff1a;检测器、识别器和分类器&#xff0c;流程架构如图11-3所示&#xff1a; 图11-5 检测器负责检测图片中的人脸&#xff0c;再将检测出来的人脸感兴趣区域&#xff08;Reg…

第二届大数据、计算智能与应用国际会议(BDCIA2024)

会议日期&#xff1a;2024年11月15-17日 会议地点&#xff1a;中国-湖北省-黄冈市 主办单位&#xff1a;黄冈师范学院 【大会主席】 【主讲嘉宾】 大会邀请到来自美国、英国、加拿大、新加坡、意大利、越南等10余位领域内学术大咖作主题报告&#xff0c;并与参会人员互动交…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【查询密钥是否存在(ArkTS)】

查询密钥是否存在(ArkTS) HUKS提供了接口供应用查询指定密钥是否存在。 开发步骤 指定密钥别名keyAlias&#xff0c;密钥别名最大长度为64字节。初始化密钥属性集。用于查询时指定密钥的属性TAG&#xff0c;比如查询的密钥范围(全量/单个)&#xff0c;当查询单个时&#xff…

分布式IO系统BL201 Profinet耦合器

BL201耦合器是一个数据采集和控制系统&#xff0c;基于强大的32 位微处理器设计&#xff0c;采用Linux操作系统&#xff0c;是一种模块化的分布式I/O系统。该系统由3部分组成&#xff1a;现场总线耦合器和各种类型的&#xff08;数字和模拟信号以及特殊功能&#xff09;I/O模块…

Ubuntu18 中JDK的安装

文章目录 一、背景说明二、获取安装包三、安装JDK3.1 上传安装包3.2 复制和解压3.3 环境变量的设置3.4 验证安装 四、问题列表4.1 .bashrc文件在哪里&#xff1f;.bashrc是什么&#xff1f;4.2 为什么使用rz上传安装包时会报&#xff1a; 传输失败&#xff1f; 五、总结 一、背…