飞道的博客

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

488人阅读  评论(0)

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


  
  1. import json
  2. 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'
  3. r = requests.get(url)
  4. r.text

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

5.转化成Polygon

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


  
  1. import pandas as pd
  2. test = polylines[ 0][ 'outer'].split( ';')
  3. lng=[]
  4. lat=[]
  5. for item in test:
  6. lng.append(item.split( ',')[ 0])
  7. lat.append(item.split( ',')[ 1])
  8. a = { 'lng':lng, 'lat':lat}
  9. df = pd.DataFrame(a)
  10. test = polylines[ 1][ 'outer'].split( ';')
  11. lng1=[]
  12. lat1=[]
  13. for item in test:
  14. lng1.append(item.split( ',')[ 0])
  15. lat1.append(item.split( ',')[ 1])
  16. a1 = { 'lng':lng1, 'lat':lat1}
  17. df1 = pd.DataFrame(a1)

 

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


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

 


转载:https://blog.csdn.net/weixin_42724039/article/details/109755461
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场