今天在网上冲浪看到一个很花哨的数据,全国各城市主要商圈从早上6点到晚上10点
的20min,30min,45min,60min,90min
生活圈轮廓。
1 获取思路
按下F12,点击淮海路可以看到出现一个网站,他就是我们要找的接口
内容是通过get请求直接获取的,接口是
https://trp.autonavi.com/ajax/life/circle.do?districtId=B00156EVQJ&dir=0&timeIndex=8
- 点击网页上的目的地,发现接口里dir变成了1
- 点击下方的时间轴的10:00,发现接口里timeindex变成了10
- 说明dir代表是出发地还是目的地,timeindex代表着时间点
可以看到返回结果很规整,是列表的列表
所以我们可以直接get获取,然后利用geopandas将坐标连成一个个面即可。
2 获取实现
get获取
response=requests.get('https://trp.autonavi.com/ajax/life/circle.do?districtId=B00156EVQJ&dir=0&timeIndex=6')
data=response.json()
data是列表组成的列表,列表里有5个列表,分别对应着20min,30min,45min,60min,90min
生活圈轮廓
构造成面
#20min为例
a=data[0]
print(a[0])
print(a[-1])
[121.541855, 31.149355] [121.54641, 31.151604]
可以看到同一个面里的数据点的首尾不一致,所以需要我们在末尾加上第一个点坐标,这样才能构成一个封闭的面。
#20min为例
a=data[0]
b=data[0][0]
#构成封闭面
a.append(b)
接着就可以利用geopandas做成面,并导出shape文件了
m1=gpd.GeoSeries([geometry.Polygon(a)],index=['20min'])
m1.crs = pyproj.CRS.from_user_input('EPSG:4326')
这样就获取了淮海路在早上8点(作为出发地)的20min生活圈范围了,通过改变接口里的districtId,dir,timeindex
就可以获取各商圈各个时间点的20min,30min,45min,60min,90min
生活圈范围了。districtId打开F12选择各个商圈查看接口可以获得。
3 成果展示
可以看到跟高德上的一样,虽然配色是丑了亿点点。
上海各个商圈的数据已经下载完毕,若对此文件和完整代码感兴趣,请帮忙转发下面微信推文到朋友圈集赞5个,截图到公众号后台即可获取