1、目标
通过高德地图API进行城市路网实时路况数据爬取、城市行政区地理信息数据爬取与城市交通拥堵态势可视化。
2、使用的工具
Python3.6 IDLE、Excel2016、记事本编辑器、ArcGIS 10.5、申请的高德开发者KEY(免费)。
3、主要思路
本文的思路是使用Python的requests模块爬取高德API的返回信息,将返回的信息数据(JSON),通过代码解析的方式存入CSV文件中,再导入ArcGIS中进行可视化处理。
4、高德对用户的API行为限制问题的解决
根据高德提供的交通态势信息API文档,注意到高德提供了两种获取交通态势信息的方式,一种是通过设定矩形区域(传入左下角以及右上角坐标)的方式,一种是通过设定圆形区域的方式(设定圆心坐标和半径),本文使用的是设定矩形区域的方式。 但是问题来了,高德对用户的API行为进行了限制,要求设定的矩形区域的对角线长度不超过10公里,但这是难不倒程序猿的,可以使用网格的思想来突破这一限制,如下图:
即将爬取区域分成多个网格,每个网格在高德规定的10公里范围之内即可,这样虽然增加了API的调用次数,但不得不说是较为合适的解决方案,本思想同样也适用于POI信息的爬取,在本文中笔者使用了简单的for循环来实现网格爬取,当然读者也可以参考:
百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制。 这篇博文中的LocaDiv类来实现更为复杂化的网格爬取方式。
5、具体做法
- 5.1 python 工具包安装,本文需要requests、pandas、 json和time包
安装方法:
摁WIN键+R键打开运行,然后输入cmd,回车进入命令提示符。
输入,pip install+python包
如 pip install requests
- 5.2 路况数据爬取
5.2.1 申请key(注意要申请绑定服务为web服务的key)
5.2.2 路况数据获取
选择路况拥堵状态的API接口,需要输入的数据包括你的key、区域选择方式(矩形,圆域)详见交通态势信息API文档
示例:
矩形
'https://restapi.amap.com/v3/traffic/status/rectangle?rectangle='+str(loc)+'&key=你的密钥'
loc为选择矩形区域左下角的经纬度,如120.247875,31519864
圆形
"https://restapi.amap.com/v3/traffic/status/circle?location=116.3057764,39.98641364&radius=1500&key=你的密钥&extensions=all"
本文以矩形为例
首先输入代码,运行代码后,从与代码所在同一文件夹中获得文件BigRoads.csv,.csv文件可由Excel或记事本打开
import requests
import pandas as pd
import json
import time
#初始API的URL
url="https://restapi.amap.com/v3/traffic/status/rectangle?key=你的密钥&extensions=all&rectangle="
#设定整个网格左下角坐标的经纬度值
baselng=119.