分享

如何利用Python获取路网交通态势

 千年老藤 2024-06-22 发布于广西

本文主要是提供技术路线和思路,使用Python语言,通过高德API接口,来获取路网实时的交通态势。

(一)效果预览

图片

图片

图片

(二)准备工作

(1)高德api key申请

进入高德开放平台,地址为:https://lbs.amap.com/。当然直接使用浏览器进行搜索【高德开放平台】也可以快速进入。首先进入控制台,然后点击管理key。添加一个【web服务】的key即可。

图片

图片

图片

个人用户者,每天免费使用的key额度是有限的,以路径规划为例,每天免费调用量上限为5000。换言之,我们每次构造的OD对不能超过5000个。如果想要调用更多的量可以向高德进行申请。

图片

图片

(2)范围shp文件准备

以arcgis为例,在arcgis中加载好高德的在线地图,然后再右侧目录栏连接到我们的目录(代码所在的根目录)。

图片

然后在该目录下新建一个shp文件。

图片

名称命名为【bounds】,要素选择面,坐标系选择地理坐标系WGS84。

图片

然后,在左侧图层栏,选择bounds图层【开始编辑】。

图片

在新弹出的编辑窗口选择面,然后就可以绘制出范围了。

图片

图片

最后停止停止编辑,保存即可,这一步arcgis的操作比较简单,就不详细展开。

(三)代码演示

要使用路径规划API来获取信息就需要提前构造OD对,通过读取边界范围的最大最小值来生成均匀的点。

图片

构造完OD,就需要使用路径规划API来获取信息。详细的url中的请求参数和返回的信息可以查看官方的开发者文档。

图片

利用python写一个循环,来获取多个od路径。主要思路如下:

图片

这段代码通过高德地图API获取每一对起点(Origin)和终点(Destination)之间的驾车路线信息,并处理请求结果,包括错误处理。具体步骤如下:

  • 读取起点和终点:从之前生成的O.txt和D.txt文件中读取所有起点和终点坐标,组合成OD对,并保存到一个新的OD.txt文件中。

  • 创建保存目录:确保json_get目录存在,用于存放后续请求的结果。

  • 构建并发送API请求:遍历每个OD对,构造包含API密钥、起点、终点的请求URL,然后使用urllib.request.urlopen发送请求。用户需手动输入高德地图API的密钥。

  • 处理响应:

    • 如果请求成功(状态码为1),解析返回的JSON数据,提取路线信息,并记录到结果列表中。

    • 遇到URLError或其他异常时,记录错误信息,并将该OD对的状态标记为FAILED。

    • 每处理完一对OD,都会打印处理进度和可能遇到的错误信息。

  • 保存结果:将所有请求的结果(包括成功的路线数据和失败的信息)保存到json_get目录下的path_results.json文件中,采用JSON格式存储,便于后续分析。

  • 控制请求速度:注释掉了动态延时的部分(原本设计用于遵守API请求速率限制),但可根据实际需求取消注释并设置合适的延时间隔。

然后就是将url返回的信息按照我们的需求提取出来。

图片

最后,可以对结果进行简单的可视化:

图片

(四)图形化小程序演示

为了方便使用,对进行了整合,写了一个图形界面的小工具。以下对该工具进行一个简单的介绍:

图片

图片

图片

图片

这是主要界面,一共分为四个步骤,操作的演示视频如下:

(五)注意事项说明

(1)首先需要准备边界范围,范围不易过大,可使用Qgis或Acrgis构建一个shp格式的边界。因为高德key每天调用的额度是有限的,只有5000条。

图片

图片

(2)每次爬取可获取当前时刻下实时的交通状态,若需要爬取不同时刻的交通状态,需要手动进行多次爬取操作。

最终结果分别保存为shp、geojson和csv文件,其中csv文件包含以下道路信息:

图片

第一列是道路的名称,第二列是拥堵系数,第三列是交通拥堵状态。

(六)效果展示

可视化预览的最终的效果如下:

图片

这是工作日早上八点,案例片区的交通状态。

然后,我分别爬取了周末和工作日早上七点到晚上七点的交通态势,将每张图片合并成gif格式,如下:

图片

周末全天拥堵变化

图片

工作日全天拥堵变化

我们还可以利用csv中的拥堵系数,进行全天交通态势变化趋势分析。

图片

图片

注意:该小工具无法一次性爬取全天的交通态势变化情况,只能获取当前时刻下的路网交通态势。

(七)较大范围测试

以渝中区为例:

第一步:通过边界范围构造OD对

图片
图片
第二步:获取json文件
我这里生成40*40=1600对OD。我大概测试了一下,调用1600次,共耗时7分44秒。产生的json文件约49M。

图片图片

图片
第三步:提取道路信息
提取信息处理较快。仅用5s便处理完49M,共85万行的数据。
图片
第四步:可视化预览
图片
图片
图片
我们可将结果文件放入Qgis或者Arcgis中进行进一步的处理。
图片

为了形成良好的正向反馈,激励作者创作,喜欢作者25,同时也会提供演示的代码和小工具供读者进行修改和研究。该技术路线具有一定的局限性,获取的范围不易过大,不能自动化连续性的爬取多个时间节点的数据,可能无法完全满足大家的需求,可以根据提供的代码自行完善补充。

感谢阅读本期内容,如果您觉得有帮助,动动您的手指头,【点赞】+【在看】,这是对我最大的支持和鼓励,非常感谢!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多