win32 api setwindowlong 第2个参数_FME与MapBox 01:等时圈(Isochrone)API
?
MapBox是非常優秀的國外地圖提供商,MapBox中在知乎設有專欄(https://www.zhihu.com/org/mapboxzhong-guo)介紹其成果及各種有趣的玩法。MapBox的API使用介紹極其詳細,對新手也友好,像我這種不會編程的只要看其介紹文檔也容易上手。
在《FME與高德API》系列記錄中,以等時圈寫起,學習MapBox API也從等時圈開始記錄。高德或百度等國內提供商,并未提供等時圈API,需要通過路徑規劃API間接制作等時圈,這相當耗費時間;而MapBox有等時圈API可以直接獲取等時圈數據;從規劃路徑獲取的等時圈可以將不同時段的交通狀況等因素綜合考慮,能反應同一地區不同時段等時圈的變化,從另一方面反映其路況變化,能進行更為深入的研究;MapBox等時圈純粹按照路網劃定等時圈,成為等距離圈可能更為貼切。《FME與高德API:01——路徑規劃API與等時圈》(點擊直達)中,對等時圈概念進行了簡單的介紹,并引用了兩張MapBox計算的等時圈圖。接下來從注冊賬號開始記錄MapBox IsoChrone API的學習。
一、MapBox賬號注冊
最早知道MapBox是在學制作熱力圖時,FMEHUB上有“LeafletHeatmap”轉換器,需要使用其Token(圖0),當時覺得還需要注冊賬號嫌太麻煩就放棄了。沒想到其賬號的注冊極其方便,賬號注冊及本記錄其他內容都非常淺顯,這篇僅是為了記錄學習的過程。
圖0 “LeafletHeatmap”轉換器生成的成都公交車站分布熱力圖
要使用MapBox的API等資源需要在其網站(mapbox.com)注冊賬號,進入網站在右上角“Sign in”(需要耐心等待!)有賬號可以直接登錄(圖1),否則點擊“Sign up for MapBox”(圖2)進入注冊頁面后,僅需填寫用戶名、郵箱、密碼及勾選服務及隱私政策既可以注冊成功(圖3,相比國內要收集號碼、身份證認證等復雜的要求真是...)注冊成功后,注冊郵箱會收到一封確認郵件,打開郵件中的鏈接后登陸進入賬號就可以看到一個默認的公共token,圖4。
MapBox的token調用量是按月進行計量,多個token的調用量共用,ISOChrome API每個月的調用量為10萬次,應該足夠用;如想了解各種API的調用量可以點擊主頁的“Pricing”進行查看。
圖1 網址及賬號登錄
圖2 從登錄頁面切換至注冊頁面
圖3 簡單的注冊信息
圖4 登錄后頁面
二、等時圈API簡介在登陸頁面點擊“Documentation”或“Help”可以進入API文檔,現以“Documentation”進行介紹。點擊“Documentation”下拉找到“Maps”(圖5),點擊進入“API”在“Navigation”下可以找到“Isochrone”(等時圈)的介紹文檔,圖6。
圖5 等時圈API文檔的入口之一
圖6 等時圈使用介紹文檔
1、API參數介紹
進入API文檔后,點擊“Isochrone API Playground”(圖7)可以直觀的調整各種參數并比較調整前后的變化。
圖7 “Isochrone API Playground”入口
A、API必填參數
必填參數共有4個,一是用于確定劃定等時圈(交通出行)方式,交通出行方式(profile),這個有三種方式:“driving”“walking”“cycling”(駕車、步行及騎行三種模式);第二個參數為等時圈的中心點坐標(coordinates,即出發點);第三個為劃定等時圈的時間“contours_minutes”;第四個參數為調用接口的令牌(秘鑰);前三個參數的具體要求(說明)見圖8。
?
圖8 三個必填參數具體設置說明
B、API可選參數
可選參數有4個:“contours_colors”用于設置等時圈的顏色;“polygons”設置輸出的等時圈多邊形或環線(linestrings)默認為環線,數據格式為GeoJSON;“denoise”作用是移除小的等時線,默認是移除;“generalize”設定等時線的平滑程度,采用的是“Douglas-Peucker generalization”法(感覺參數調優很難),見圖9。
圖9 四個可選參數具體設置說明
C、返回數據結構
調用API返回的數據為GeoJSON格式,這種格式在FME中解析非常簡單,具體返回數據的屬性較為簡單(圖10),就不再一一介紹。
圖10 GeoJSON數據具體屬性
D、API接口的限制與約束
a、每分鐘最大調用次數為300次;
b、僅支持單點(中心點)生成等時圈;
c、每次調用接口最多只能生成4條等時線(即傳入4個時間);
d、等時線的支持的最長時間為60分鐘。
上述的限制可能影響在線調用的體驗,每次只能單個中心點及單詞調用最多支持4條等時線,這兩個可以采用分批次調用解決,而最長只支持60分鐘就沒有其他解決辦法。
E、參數在線實操(調試)
點擊圖7所示位置,可以進入等時圈實操(參數調試)頁面。左邊是必填及選填參數的設置;右上面部為實時結果展示地圖,通過移動地圖中標注的點即可生成一個等時圈;左下邊有兩個數據,一個是調用接口的具體URL,另一個是返回的GeoJSON數據,圖11為通過設定經緯度,及將等時圈時間更改為“15 min increments”得到的結果。
圖11 等時圈實時顯示的數據
通過將“denoise”(去噪)參數調整為“1”(即默認值),等時圈并未發生明顯的變化,圖12。通過調整“generalize”(平滑/簡化處理)等時圈節點將會產生明顯的變化,圖13。
圖12 “denoise”參數為“1”的情況
圖13 經簡化(平滑)處理后的等時圈
F、GeoJSON數據的屬性
返回的數據格式為GeoJSON,共有兩部分數據,一是存有用于展示的顏色透明度及等時圈長度的屬性數據,二是由于存儲幾何形狀的坐標數據,見圖14。
圖14 GeoJSON數據格式
三、模板(自定義轉換器)的構建
1、構建一個簡單的接口調用模板(自定義轉換器)
這個接口的數據結構比較簡單,根據第“二”點介紹,只要創建自定義參數,對GeoJSON進行解析就可以了。
自定義參數共設定了5個:“出發點經緯度”用于輸入等時圈中心經緯度,經緯度以英文“,”分隔;“時間”(Choice(Multiple類型),這里按照每5分鐘為一個間隔,時間必須從小到大見圖8、圖15;“出行方式”(Choice with Alias類型),見圖16;“token”用“Text”類型和“簡化(光滑)處理”用“Number”類型,這里設定0-500(這個參數沒有上限,使用了幾次,好像超過100,效果就慘不忍睹);等時圈的形狀采用多邊形(polygons=true),去除零碎的等時圈(denoise)用默認。最后參數設置效果見圖17。
圖15 時間自定義參數設置
圖16 出行方式自定義參數設置
圖17 自定義參數最后效果
數據的獲取與解析共用了3個轉換器,一是“StringReplacer”將空格替換成“,”(在FME的Choice Multiple自定義參數中,被選擇的多個參數默認以空格分隔,這個轉換器不是必須的可以再下一個轉換器中采用四則運算器中的“ReplaceString”函數);二是用于獲取數據的“HTTPCaller”,一般建議對文件頭中的“User-Agent”進行設置,參數設置見圖18,;第三個轉換器為“JSONFragmenter”,“HTTPCaller”獲取的數據格式見圖14,需要獲取的屬性信息只有“contour”,在“Fragment as Format”中選擇“GEOJSON”,其余部分按照圖19設置即可獲取“contour”值及轉換成幾何圖形,結果見圖20;至此,整個接口的調用就完成了,如果不構建成自定義轉換器只需要用到三個轉化器(不含“Creator”)。
圖18 “HTTPCaller”參數設置
圖19 “JSONFragmenter”參數設置
圖20 每個15分鐘獲取一條等時線的結果(步行)
2、讓模板復雜些
等時圈API每次調用最多只能傳入4個以英文“,”分隔的時間如果傳入的時間超過4個,這就需要將拆分,再進行多次調用。
時間拆分處理有多種方式,這里采用的是“AttributeSplitter”按照字符串長度分隔,見圖21,再用“ListExploder”進行屬性暴露,最后在“StringReplacer”后增加“Tester”過濾掉時間為空的列。修改后的模板見圖22,步行方式每鎘5分鐘獲取等時圈結果見圖23。
圖21 “AttributeSplitter”參數設置
圖22 經過更改的模板
圖23 “一次性”獲取12條等時線
3、讓結果便于可視化
API獲取的結果數據,每個等時圈就是一個面,如有多個等時圈在可視化時是難于區分(即使采用了色帶也不行【ARCGis和QGIS都不行】,或許有其它方法只是我不會),如圖24。
圖24 經緯度數據集合格式一
要在gis軟件中進行可視化展示可以將兩個相鄰時間段包圍的范圍構面形成環面、等時線還有環面與等時線疊加。
獲取等時間線,有兩種方式,一是調用接口時將“polygons=true”參數去除;另一種方式是用“GrometryCoercer”將面轉成線。將獲取的數據轉成環面也簡單只要用“AreaBuilder”重新進行構面即可,要素可以是面也可以是閉合線。為了減少轉換器的使用接口調用是將“polygons=true”參數去除,在最后的增加“AreaBuilder”轉換器就可以等到便于可視化展示的線、面數據。模板修改后的流程見圖25,可視化結果見圖26-30。當然為了便于可視化,模板中應增加出發點(中心點)的矢量化,這個即使“AttributeSplitter”+“VertexCreator”就可以實現。
圖25 進一步調整后的模板(自定義轉換器)
圖26 環面可視化展示(步行,廈門)
圖27 環面疊加等時線(步行,廈門)
圖28 環面疊加等時線(步行,上海)
圖29 環面疊加等時線(步行,泉州)
圖30 環面疊加等時線(騎行,泉州)
對模板完成單次運行獲取超過4條等時圈優化后,接下來,應該是對模板進一步進行多個出發點的調整;這里就不再記錄了。
圖31 環面疊加等時線(步行,4點4線;泉州)
圖32 面疊加等時線(步行,4點12線;泉州)
圖33 面疊加等時線(步行,46點6線;廈門)
向公眾號后臺發送IsochroneMultiPoints,獲取本文自定義轉換器下載連接。
如覺得有用,點贊點在看再走!
總結
以上是生活随笔為你收集整理的win32 api setwindowlong 第2个参数_FME与MapBox 01:等时圈(Isochrone)API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3 format函数_Pyt
- 下一篇: oracle 48小时内_恭喜詹姆斯!恭