等時圈是指從某點出發,以某種交通方式在特定時間內能到達的距離覆寫的范圍,在可達性分析中十分常見,原本我們需要將地圖柵格化不停地呼叫路徑規劃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://www.uj5u.com/houduan/224278.html
標籤:python
上一篇:速來圍觀!看小伙是如何用python可視化各城市擁堵情況的
下一篇:Python實作CART決策樹
