近日做项目,有一部分要分析研究范围内的交通运行情况。传统的方法是要去现场调研数车,通过交通量和道路通行能力来计算道路的服务水平。但是因为疫情原因,不想外出,想要利用其它方法来获得区域的交通运行水平。首先想到的就是高德地图api的交通态势。
![672ee448a6ece7f5e046bd0c46a8244e.png](https://img-blog.csdnimg.cn/img_convert/672ee448a6ece7f5e046bd0c46a8244e.png)
有了想法之后,作为一个只会看,不会写代码的辣鸡交通规划师,就必须借助度娘的帮助了。在网上发现很多介绍高德api交通态势爬取的方法,下面就列举一个我看完之后能够实现的方法。(写这篇文章的原因主要是为自己加深印象,小伙伴们也可以去网上搜索,很容易获得方法和代码)
本次使用的工具
Spyder(python3.7)编辑器、arcgis10.2主要是这两个。(当然会用到记事本、excel之类的了)
主要思路
根据高德api提供的接口,利用python的requests库get到高德返回到交通运行信息。将其保存成csv文件,导入到arcgis中,进行可视化展示分析。
方法分析
高德提供了两种获取区域交通态势的方法,一种是矩形区域查询(需要矩形的左下角和右上角经纬度坐标,注意是高德经纬度格式),另一种方法是圆形区域查询(需要圆形中心的经纬度和半径)。本次就采用了矩形区域的交通态势查询,但是高德对于查询的区域范围进行了限制(矩形对角线的距离在10公里之内),但是这也难不住网上的各位大神,利用网格的方法突破了这种限制。
将要分析的区域分割成多个网格,每个网格对角线距离不要超过10公里,然后利用for循环对网格的数据依次进行调用,这样虽然增加api调取的次数,但也不失为一个好的方法。
![03fa48be94333696e323bc874054927f.png](https://img-blog.csdnimg.cn/img_convert/03fa48be94333696e323bc874054927f.png)
主要代码
代码主要来源于网上,不是本人撰写(主要是自己太笨),部分有所改动,经过我的实践,代码好用。下面这些代码主要是用来爬取及保存交通态势数据。
# -*- coding: utf-8 -*-
"""
Created on Thu May 7 10:43:18 2020
@author: user
"""
import requests
import pandas as pd
import json
import time
#初始API的URL
url="https://restapi.amap.com/v3/traffic/status/rectangle?key=申请的ak&extensions=all&rectangle="
#设定整个网格左下角坐标的经纬度值
baselng=120.320805
baselat=36.098401
#设定每个网格单元的经纬度宽
widthlng=0.04
#同一维度,lng=0.01≈1000米
widthlat=0