等时圈是指从某点出发,以某种交通方式在特定时间内能到达的距离覆盖的范围,在可达性分析中十分常见。原本我们需要将地图栅格化不停地调用路径规划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')
转载:https://blog.csdn.net/weixin_42724039/article/details/109755461