利用高德地图api绘制公交+地铁的等时圈

等时圈是指从某点出发,以某种交通方式在特定时间内能到达的距离覆盖的范围,在可达性分析中十分常见。原本我们需要将地图栅格化不停地调用路径规划api来获得等时圈,现在已经有网站为我们做好了这些工作,比如https://docs.mapbox.com/playground/isochrone/。我们只需要选择交通方式(步行、骑行和驾车),和需要绘制的时间即可,但是比较遗憾的是无法获取公交(地铁/地铁+公交)的等时圈。

如果我们想获得公交(地铁/公交+地铁)的等时圈,有什么比较简便的方法呢?——> 可以通过高德地图API的公交到达圈功能。

1.通过高德地图API搜索公交到达圈,点击选中。

2.这个时候我们就可以通过改变时长和出行方式来获得你想要的公交(地铁/公交+地铁)等时圈。

3.但是如果想要将这个图放到arcgis/qgis中进行操作,就需要将polygon抓取下来。我们可以打开开发者工具,在Network中找到这么一条链接,里面的polylines里的outer其实就是各个圈。

4.通过python抓取。

4.1首先找到它的url,里面的key需要自己在高德地图api里面注册获取(这里的服务平台选择Web端(JS API)),通过python的requests库解析。


import json
url = 'https://restapi.amap.com/v3/direction/reachcircle?key=您的密钥&location=116.397428,39.90923&time=44&s=rsv3&extensions=all&output=json&strategy=2&callback=jsonp_488528_&platform=JS&logversion=2.0&appname=https%3A%2F%2Flbs.amap.com%2Fapi%2Fjavascript-api%2Fexample%2Fbus-info%2Farrival-range%2F&csid=73E0636A-636C-43C3-A098-5E94A75837C1&sdkversion=1.4.15'
r  = requests.get(url)
r.text

4.2 解析数据。获得的数据不完全是json格式,需要稍作处理,将’jsonp_488528_(’,‘)’删除,再转化成json格式,取出outer里的数据。

5.转化成Polygon

5.1 将经纬度转化成dataframe(这里我只取了两个outer测试)

import pandas as pd
test = polylines[0]['outer'].split(';')
lng=[]
lat=[]
for item in test:
    lng.append(item.split(',')[0])
    lat.append(item.split(',')[1])
a = {'lng':lng,'lat':lat}
df = pd.DataFrame(a)

test = polylines[1]['outer'].split(';')
lng1=[]
lat1=[]
for item in test:
    lng1.append(item.split(',')[0])
    lat1.append(item.split(',')[1])
a1 = {'lng':lng1,'lat':lat1}
df1 = pd.DataFrame(a1)

5.2利用Polygon和geopandas转化成shp文件。

import geopandas
from shapely.geometry import Polygon
p0 = Polygon(df.values)
p1 = Polygon(df1.values)
p = geopandas.GeoSeries([p0,p1])
p.to_file('test.json',encoding='utf-8-sig')

猜你喜欢

转载自blog.csdn.net/weixin_42724039/article/details/109755461