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

Python应用指南:高德拥堵延时指数

随着城市化进程的加快,交通拥堵问题日益严重,成为影响城市居民生活质量的重要因素之一。为了科学评估和管理交通拥堵,各种交通拥堵指数应运而生。其中,高德地图提供的“拥堵延时指数”因其数据丰富、实时性强和应用广泛而备受关注。本篇文章我们将视角聚焦于高德拥堵延时指数的定义、计算方法、应用场景以及其在城市交通管理中的重要作用。

高德地图交通大数据链接:上海 城市实时交通详情

1. 高德拥堵延时指数的定义

高德拥堵延时指数(Traffic Congestion Delay Index, TCDI)是一种衡量城市交通拥堵程度的综合指标。它通过比较实际行车时间和自由流状态下的行车时间来量化交通拥堵的程度。具体来说,拥堵延时指数反映了在拥堵状态下,车辆通过某路段所需的时间相对于自由流状态下所需时间的增加比例。

2. 高德拥堵延时指数的计算方法

高德拥堵延时指数的计算公式如下:

拥堵延时指数:实际旅行时间与自由流(畅通)状态下旅行时间的比值

  • 实际行驶时间(Actual Travel Time, TaTa​):在实际交通条件下,车辆通过某路段所需的时间。
  • 自由流行驶时间(Free Flow Travel Time, TfTf​):在无交通干扰的情况下,车辆通过该路段所需的时间。

例如,假设某路段的自由流行驶时间为10分钟,实际行驶时间为20分钟,则拥堵延时指数为:

拥堵延时指数=20/10=2.0

这意味着在拥堵状态下,车辆通过该路段所需的时间是自由流状态下所需时间的2倍。

3. 高德拥堵延时指数的分级标准

为了更直观地理解和应用拥堵延时指数,高德地图将其分为几个等级:

  • 1.0 - 1.4:畅通
  • 1.5 - 1.9:缓行
  • 2.0 - 3.9:拥堵
  • 4.0 以上:严重拥堵

其他指标释义可参考高德发布的2023年度中国主要城市交通分析报告附录A名词解释部分:

2023年度中国主要城市交通分析报告

先讲一下方法思路,一共三个步骤;

方法思路

  1. 通过高德驾车路径规划查询路段的通行时间、速度等指标(允许计算多条道路)
  2. 每5分钟记录一次数据
  3. 输出csv的结果表

高德驾车路径规划的个人开发者账号的日配额5000次/日, 高德的拥堵延时指数则是每5分钟自动刷新,我们可以通过驾车规划来计算路段的拥堵延时指数,理论上我们可以实现对一条或者多条道路的全天监测,这取决于我们账号的额度,基于这个思路,我们就阔以通过python脚本来实现自动化的流程;

我们来基于图示来猜测一下计算逻辑,就是计算通过计算该段路的实际旅行时间与自由流(畅通)状态下旅行时间的比值,来得到的数值,那我们只要把驾车路径调整成需要观测道路的行驶路径,即可监测该条路的拥堵延时指数和平均速度这些指标;

完整代码#运行环境Python 3.11

import requests
import json
import math
import time
import csv
import os
import pandas as pd
import matplotlib.pyplot as plt
import geopandas as gpd
from shapely.geometry import Point, LineString# 设置中文支持
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号# 常量定义
pi = 3.14159265358979324
ee = 0.00669342162296594323
a = 6378245.0def out_of_china(lng, lat):"""判断是否在国内,不在国内不做偏移:param lng: 经度:param lat: 纬度:return: 是否在国内"""return not (73.66 < lng < 135.05 and 3.86 < lat < 53.55)def transformlat(lng, lat):ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lat * pi) + 40.0 * math.sin(lat / 3.0 * pi)) * 2.0 / 3.0ret += (160.0 * math.sin(lat / 12.0 * pi) + 320 * math.sin(lat * pi / 30.0)) * 2.0 / 3.0return retdef transformlng(lng, lat):ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * math.sqrt(math.fabs(lng))ret += (20.0 * math.sin(6.0 * lng * pi) + 20.0 * math.sin(2.0 * lng * pi)) * 2.0 / 3.0ret += (20.0 * math.sin(lng * pi) + 40.0 * math.sin(lng / 3.0 * pi)) * 2.0 / 3.0ret += (150.0 * math.sin(lng / 12.0 * pi) + 300.0 * math.sin(lng / 30.0 * pi)) * 2.0 / 3.0return retdef gcj02towgs84(lng, lat):"""GCJ02(火星坐标系)转GPS84:param lng:火星坐标系的经度:param lat:火星坐标系纬度:return:"""if out_of_china(lng, lat):return lng, latdlat = transformlat(lng - 105.0, lat - 35.0)dlng = transformlng(lng - 105.0, lat - 35.0)radlat = lat / 180.0 * pimagic = math.sin(radlat)magic = 1 - ee * magic * magicsqrtmagic = math.sqrt(magic)dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)mglat = lat + dlatmglng = lng + dlngreturn [lng * 2 - mglng, lat * 2 - mglat]def coordinates(c):lng, lat = c.split(',')lng, lat = float(lng), float(lat)wlng, wlat = gcj02towgs84(lng, lat)return wlng, wlatdef driving_planning(api_key, routes):results = []all_route_coordinates = []for i, (from_location, to_location) in enumerate(routes):url = 'https://restapi.amap.com/v3/direction/driving'parameters = {'key': api_key,'origin': from_location,'destination': to_location,'strategy': '11','output': 'json'}response = requests.get(url, params=parameters)data = json.loads(response.text)if data['status'] == '1':route = data['route']paths = route['paths']if paths:path = paths[0]distance = int(path['distance']) / 1000  # 转换为公里duration = int(path['duration']) / 60  # 转换为分钟steps = path['steps']route_coordinates = []for step in steps:polyline = step['polyline']# 转换坐标coordinates_list = [coordinates(c) for c in polyline.split(';')]route_coordinates.extend(coordinates_list)# 计算平均速度(km/h)average_speed = distance / (duration / 60)results.append({'route': f"路线 {i + 1}",'总出行距离': distance,'总出行时间': duration,'平均速度': average_speed})print(f"路线 {i + 1}:")print(f"  总出行距离: {distance:.2f}公里")print(f"  总出行时间: {duration:.2f}分钟")print(f"  平均速度: {average_speed:.2f}公里/小时")all_route_coordinates.append(route_coordinates)else:print(f"未找到路径 {i + 1}")else:print(f"路线规划失败 {i + 1}: {data['info']}")return results, all_route_coordinatesdef export_to_csv(results, filename):file_exists = os.path.exists(filename)with open(filename, mode='a', newline='', encoding='ANSI') as file:writer = csv.writer(file)if not file_exists:writer.writerow(['时间', '路线', '总出行距离(公里)', '总出行时间(分钟)', '平均速度(公里/小时)'])current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())for result in results:writer.writerow([current_time, result['route'], f"{result['总出行距离']:.2f}", f"{result['总出行时间']:.2f}", f"{result['平均速度']:.2f}"])def plot_routes(all_route_coordinates):fig, ax = plt.subplots(figsize=(10, 10))for i, route_coordinates in enumerate(all_route_coordinates):route_line = LineString(route_coordinates)gdf = gpd.GeoDataFrame(index=[0], geometry=[route_line])gdf.plot(ax=ax, color=f'C{i}', label=f"路线 {i + 1}")ax.set_xlabel('经度')ax.set_ylabel('纬度')ax.legend()plt.title('路线规划图')plt.show()def main():api_key = '你的key'  # 替换为你的高德地图API密钥# 定义多个起终点对routes = [('121.535949,31.213957', '121.572702,31.215328'),  # 示例起终点('121.564392,31.204669', '121.557429,31.231008'),  # 示例起终点# 可以继续添加更多的起终点对]first_run = True  # 标志变量,用于判断是否是第一次运行while True:results, all_route_coordinates = driving_planning(api_key, routes)export_to_csv(results, '拥堵延时指数.csv')print("数据已导出到CSV文件")if first_run:plot_routes(all_route_coordinates)first_run = False  # 第一次运行后设置标志为Falsetime.sleep(300)  # 每五分钟运行一次if __name__ == '__main__':main()

这里我们以上海的花木路和芳甸路作为研究对象;

结果输出为csv的形式,便于我们后续的计算与分析;

这里主观界定凌晨的2:00-4:00点路段的通行时间均值作为自由流(畅通)状态下旅行时间,基于此来计算的拥堵延时指数,同时我们把监测时间延长到24小时,那么我们就可以看到整条道路的早晚高峰分布情况,平均道路运行速度等直观的路况数据;

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

相关文章:

Python应用指南:高德拥堵延时指数

随着城市化进程的加快&#xff0c;交通拥堵问题日益严重&#xff0c;成为影响城市居民生活质量的重要因素之一。为了科学评估和管理交通拥堵&#xff0c;各种交通拥堵指数应运而生。其中&#xff0c;高德地图提供的“拥堵延时指数”因其数据丰富、实时性强和应用广泛而备受关注…...

ISO 21434标准:汽车网络安全管理的利与弊

ISO 21434标准在提升汽车网络安全性方面起到了重要作用&#xff0c;但任何标准都不是完美无缺的&#xff0c;ISO 21434标准也存在一些不足之处。以下是对其不足之处的分析&#xff1a; 一、标准的灵活性与适应性 缺乏具体技术细节&#xff1a;ISO 21434标准更多地提供了网络安…...

无插件H5播放器EasyPlayer.js视频流媒体播放器如何开启electron硬解码Hevc(H265)

在数字化时代&#xff0c;流媒体播放器技术正经历着前所未有的变革。随着人工智能、大数据、云计算等技术的融合&#xff0c;流媒体播放器的核心技术不断演进&#xff0c;为用户提供了更加丰富和个性化的观看体验。 EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、…...

excel版数独游戏(已完成)

前段时间一个朋友帮那小孩解数独游戏&#xff0c;让我帮解&#xff0c;我看他用电子表格做&#xff0c;只能显示&#xff0c;不能显示重复&#xff0c;也没有协助解题功能&#xff0c;于是我说帮你做个电子表格版的“解题助手”吧&#xff0c;不能直接解题&#xff0c;但该有的…...

接口上传视频和oss直传视频到阿里云组件

接口视频上传 <template><div class"component-upload-video"><el-uploadclass"avatar-uploader":action"uploadImgUrl":on-progress"uploadVideoProcess":on-success"handleUploadSuccess":limit"lim…...

Arcgis 地图制作

地图如下,不同历史时期&#xff1a;...

【每日一题1121】python校招笔试题、面试题

1、Python字符串不是通过NUL或者’\0’来结束的 C语言中字符串使用’\0’作为结束符&#xff0c;以防止越界。但是在python中&#xff0c;字符串值只包含所定义的东西。 2、执行以下程序&#xff0c;输出结果为&#xff08;&#xff09; class Base(object):count 0def __in…...

Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现

Spring Boot Vue 基于 RSA 的用户身份认证加密机制实现 什么是RSA&#xff1f;安全需求介绍前后端交互流程前端使用 RSA 加密密码安装 jsencrypt库实现敏感信息加密 服务器端生成RSA的公私钥文件Windows环境 生成rsa的公私钥文件Linux环境 生成rsa的公私钥文件 后端代码实现返…...

Docker搭建有UI的私有镜像仓库

Docker搭建有UI的私有镜像仓库 一、使用这个docker-compose.yml文件&#xff1a; version: 3services:registry-ui:image: joxit/docker-registry-ui:2.5.7-debianrestart: alwaysports:- 81:80environment:- SINGLE_REGISTRYtrue- REGISTRY_TITLEAtt Docker Registry UI- DE…...

Qt打开文件对话框选择文件之后弹出两次

项目场景&#xff1a; 在 Qt 中&#xff0c;使用 ui 自动生成的 UI 文件会为每个控件自动生成一些默认的槽函数。如果您手动创建的槽函数名称与这些自动生成的槽函数名称相同&#xff0c;就会导致信号被多次连接&#xff0c;从而引发多次弹出文件对话框的问题。 原因分析&…...

【JAVA】正则表达式中的正向肯定预查

在Java中&#xff0c;正向肯定预查&#xff08;Positive Lookahead&#xff09;是一种正则表达式的高级特性&#xff0c;用于在匹配某个模式之前检查某个条件是否满足。正向肯定预查不会消耗字符&#xff0c;也就是说&#xff0c;它不会将匹配的字符从剩余的字符串中移除&#…...

django从入门到实战(一)——路由的编写规则与使用

Django 路由的编写规则与使用 在 Django 中&#xff0c;路由&#xff08;URLconf&#xff09;是将 URL 映射到视图函数的机制。它允许我们定义网站的 URL 结构&#xff0c;并将请求分发到相应的处理函数。以下是关于 Django 路由的定义规则及使用的详细介绍。 1. Django 的路…...

vue框架开发的前端项目,build和package的区别

在使用 Vue 框架开发前端项目时&#xff0c;build 和 package 是两个常见的操作&#xff0c;它们有不同的目的和作用。下面是它们的区别&#xff1a; 1. Build&#xff08;构建&#xff09; build 是将前端源代码&#xff08;如 Vue 组件、JavaScript 文件、CSS 样式等&#…...

视频智能分析软件LiteAIServer摄像机实时接入分析平台噪声监测算法介绍

在视频监控领域&#xff0c;噪声问题一直是一个令人头疼的难题。无论是低光环境、摄像机传感器的高灵敏度&#xff0c;还是编码压缩过程中的失真&#xff0c;都可能导致视频中出现噪声&#xff0c;从而影响监控画面的清晰度和准确性。这些噪声不仅降低了视频的可读性&#xff0…...

鸿蒙UI开发与部分布局

UI开发 1. 布局概述 1.1 开发流程 1.先确定开发流程 -> 2.分析页面元素构成 ->3.选用合适的布局容器组件 1.3 布局元素组成&#xff1a;盒模型 2.1 布局分类 2.1 线性布局 线性布局是开发中最常用、最基础的布局&#xff0c;通过线性容器Row和Column构建 2.1.1 线性布…...

redis的map底层数据结构 分别什么时候使用哈希表(Hash Table)和压缩列表(ZipList)

在Redis中&#xff0c;Hash数据类型的底层数据结构可以是压缩列表&#xff08;ZipList&#xff09;或者哈希表&#xff08;HashTable&#xff09;。这两种结构的使用取决于特定的条件&#xff1a; 1. **使用ZipList的条件**&#xff1a; - 当Hash中的数据项&#xff08;即f…...

css水平居中+垂直居中

display:“flex”,position: “absolute”,top:“50%”,left:“50%”,transform: ‘translate(-50%, -50%)’...

设计模式之 组合模式

组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象组合成树形结构来表示“部分-整体”层次。组合模式允许客户端统一处理单个对象和对象集合。换句话说&#xff0c;组合模式让客户端可以像处理单个对象一样处理对象的集合&#…...

LCR 001 两数相除

一.题目&#xff1a; . - 力扣&#xff08;LeetCode&#xff09; 二.原始解法-超时&#xff1a; class Solution: def divide(self, a: int, b: int) -> int: # 1&#xff09;分析&#xff1a; # 除法计算&#xff0c;不能使用除法符号&#xff0c;可以理解为实现除法 # 除法…...

数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别

数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念&#xff0c;各自有不同的特点和应用场景。以下是它们的主要区别&#xff1a; 1. 数据库&#xff08;Database&#xff09; 定义&#xff1a;结构化的数据存储系统&#xff0c;用于高效地存储、检…...

别再死记硬背了!用主成分分析(PCA)的实战案例,反向理解线性代数里的谱分解

从鸢尾花降维实战逆向拆解&#xff1a;为什么PCA中的谱分解是线性代数的精髓&#xff1f; 记得第一次用PCA处理鸢尾花数据集时&#xff0c;盯着sklearn输出的三维散点图发愣——明明原始数据有4个特征&#xff08;萼片长度、萼片宽度、花瓣长度、花瓣宽度&#xff09;&#xf…...

MySQL存储图片旋转元数据的最佳实践

MySQL存储图片旋转元数据的最佳实践 1. 引言 在日常应用中&#xff0c;我们经常遇到这样的场景&#xff1a;用户上传的图片在显示时方向不正确&#xff0c;需要根据EXIF信息中的旋转角度进行自动校正。比如手机拍摄的照片&#xff0c;由于设备方向不同&#xff0c;可能包含90…...

从零构建:基于FreeRTOS与LVGL的低功耗智能手表实战指南

1. 项目背景与核心目标 第一次接触智能手表开发是在三年前&#xff0c;当时市面上开源的方案要么功能简陋&#xff0c;要么功耗高得离谱。作为一个嵌入式老鸟&#xff0c;我决定自己动手搞一套真正可用的低功耗方案。经过多次迭代&#xff0c;最终选择了FreeRTOSLVGL这个黄金组…...

uniapp日期处理全攻略:获取某月首尾日、近七天日期等实用技巧

Uniapp日期处理实战&#xff1a;从基础格式化到高级业务场景解决方案 在移动应用开发中&#xff0c;日期处理几乎贯穿所有业务场景。无论是电商平台的限时抢购、医疗应用的预约挂号&#xff0c;还是企业系统的报表统计&#xff0c;精准高效的日期操作都是保障业务逻辑完整性的关…...

2023最新版Prometheus+Grafana监控系统搭建指南(含Docker-compose部署)

2023云原生监控实战&#xff1a;基于Docker-compose的PrometheusGrafana全栈部署指南 在云原生技术席卷各行各业的今天&#xff0c;监控系统已成为保障业务稳定性的神经中枢。传统监控方案在面对容器化、微服务架构时往往力不从心&#xff0c;而Prometheus作为CNCF毕业项目&…...

手把手教你用Dockerfile为Ubuntu 18.04镜像定制Python+OpenCV开发环境

从零构建PythonOpenCV的Docker开发环境&#xff1a;最佳实践指南 在计算机视觉和机器学习项目中&#xff0c;一个标准化、可复现的开发环境至关重要。Docker作为容器化技术的代表&#xff0c;能够完美解决"在我机器上能跑"的经典难题。本文将手把手教你如何基于Ubunt…...

告别低效循环:利用快马平台智能生成向量化代码,提升数据处理性能

最近在做一个数据分析项目时&#xff0c;遇到了性能瓶颈。处理一个几十万行的数据集时&#xff0c;简单的循环操作竟然要跑好几分钟。经过一番摸索&#xff0c;我发现向量化操作真是个神器&#xff0c;今天就分享一下如何用NumPy和Pandas来提升数据处理效率。 首先我们创建一个…...

2分钟搞定:Windows包管理器Winget一键安装全攻略

2分钟搞定&#xff1a;Windows包管理器Winget一键安装全攻略 【免费下载链接】winget-install Install winget tool using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2022. 项目地址: https://gitcode.com/gh_mirrors/wi/winge…...

别再让收款语音卡顿!UniApp + WebSocket 实现流畅支付播报的完整避坑指南

UniApp WebSocket 支付语音播报实战&#xff1a;从性能优化到高并发处理 在移动支付场景中&#xff0c;实时语音播报不仅是用户体验的关键环节&#xff0c;更是商户经营效率的重要保障。想象这样的场景&#xff1a;高峰时段&#xff0c;收银台前排队等待的顾客&#xff0c;收银…...

1815《中国城市统计年鉴》面板数据(1985-2024)

1、搜说数据皮皮侠2、使用兑换码 516004233462b5Qy0SoHIf26 获取注意&#xff1a;兑换码2026.3.30&#xff08;不包括30号&#xff09;前有效&#xff01;数据简介《中国城市统计年鉴》是国家统计局城市社会经济调查司主办的、全面反映中国城市经济和社会发展情况的资料性年刊。…...