天天看點

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

今天打開高德地圖web服務文檔發現,交通态勢API接口已經下線;感覺地圖的開放接口越來越少,以前高德開放建築接口(道聽途說,沒用過)、道路接口(還可以用、無開發文檔、不再維護更新),這次更新文檔後下線交通态勢(接口尚可以使用,隻是無使用文檔),不知下次會下線那個接口。上次介紹了web端的多邊形POI搜尋的工具,沒記錄具體的思路與模型,這次介紹web服務的多邊形POI搜尋API的擷取思路,模型有多層嵌套,但總體思路還是比較簡單。

一、MYFME自帶的轉換器介紹

MYFME中“AMapPOIDownloader”這個轉換器“根據給定的多邊形(WGS84格式),申請多邊形内的POI資料。”(注:這個轉化器無需授權,這個好像是部落格大賽的作品),與這個轉換器配合的有“AMapRequestor”配合使用,圖1。【MYFME還有百度和騰訊(2017版)POI下載下傳相關的轉換器】網上也有不少關于通過FME擷取POI的文章,但這些轉換器後文章都沒有考慮突破每次傳回POI資料不超900個的限制,需要擷取全面的POI隻能靠經驗劃分好網格大小,再調用相關的轉換器或流程。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖1 MYFME自帶高德POI下載下傳轉換器

二、自定義轉換器簡介

自定義轉換器名稱“AmapPOIDownloader_WEB_2018.1”,與上一篇記錄的web端的POI及公交路線資訊擷取轉換相比,多了關鍵詞搜尋的功能,少了公交路線資訊下載下傳的功能,這兩個轉換還存在一些問題,如錯誤資訊提示較少,版本相容問題(這是由于2019版本FME更新了“JSONFragmenter”“JSONFlattener”所引起的)。

1、與MYFME及網絡現有的擷取高德POI的FME魔闆相比。本轉換器更具有更多選擇,可根據行政區名稱等3方式進行POI的擷取,標明範圍後無需人工進行網格分隔而是有轉換器通過對區域内POI數量的判斷自行對網格進行分隔。

2、輸出端口及參數設定。在web端轉換器中已詳細進行了介紹(點選直達),這裡就不在介紹,這個轉換器與web端轉換器的差别在于輸出端無公交路線資訊的相關端口,參數設定增加了關鍵詞搜尋功能,圖2。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖2 轉換器參數項

三、轉換器設計思路

本轉換器的思路很簡單,從人性的懶惰和貪婪出發:即最少的資訊輸入獲得最多的資料輸出。具體的實作是輸入(選擇)需要下載下傳區域的名稱、POI類型(或關鍵詞)及web服務key,自動擷取資料,為實作這個功能将轉換器劃分成四個子產品(見圖3):

1、行政名稱選擇子產品,這個子產品的流程以前寫過記錄;

2、行政區矢量範圍查詢子產品,這個子產品的流程以前也寫過記錄;

3、行政區域(多邊形)劃分,即将需要查詢的範圍劃分成POI數量少于900個的小網格;

4、根據劃分好的網格下載下傳POI,這個可以通過MYFME自帶的轉換器實作(但這個轉換器還有不少的坑)。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖3 自定義轉換器的原始建構

1、2兩部分在以前的記錄已有詳細介紹,這次主要記錄3網格的劃分、及簡單記錄POI擷取及JSON資料的解析思路。

1、網格劃分的思路與實作流程

這個自定義轉換器跟網上很多關于突破高德POI傳回900條資料的思路是一樣的:

A、先按照一定的大小對網格進行初步劃分,然後判斷每個網格内POI的數量是否超過大于900條;

B、對小于900條的網格,直接擷取網格内的POI,對大于900的網格進行四等分,大于900進一步劃分,直到所有網格内POI數量均少于900。

FME魔闆的實作,跟思路一緻分兩步實作,第一步按指定大小劃分網格見圖4:

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖4 按指定大小劃分網格

第二步,對網格内POI數量大于900進一步劃分,這步需要用到循環(見圖5),同時由于涉及阻塞轉換器(Blocked Transformer ,Tiler),這步必須建構自定義轉換器,涉及阻塞轉換器的循環建構,請參考《Looping with a Blocking Transformer》(https://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_IntegrationConsole/Workbench/looping_with_blocking_transformer.htm)或《Loopingwith Blocking Transformers》(https://community.safe.com/s/article/looping-with-blocking-transformers)。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖5 對POI數量大于900的網格進行疊代分割的循環流程

2、POI響應體的擷取與資料解析思路

第一步是建構網址并擷取響應體,判斷網格内POI的數量,如小于等于25/50(數量根據個人喜好設定,但會影響資料的擷取)大于25/50用Cloner轉換器進行分頁,從第二頁開始擷取資料;第二步根據需要将JSON資料中的屬性提出出來,流程見圖7。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖6 POI擷取流程

這個自定義轉換的介紹到此為止。下面介紹下這個自定義轉換器跟web端(JS)自定義轉換器改進的地方。web端轉換器,按照設定大小對下載下傳範圍面進行切割時,會包含很多下載下傳範圍之外的區域,見圖7;而web端将會下載下傳範圍自外的範圍盡量減少,見圖8。當然也可以切割成不包含下載下傳範圍外的網格(圖9),而且實作還更為簡單,但由于下載下傳區域的不規則,太多的坐标對可能會産生錯誤,這裡不推薦。

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖7 web端按照指定大小切割産生的網格

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖8 web服務按照指定大小切割産生的網格

高德web服務api_FME與高德API:07 web服務POI多邊形搜尋

圖9 直接用Tiler分割的結果

       FME與高德API,關于資料擷取的應該不會在更新了;接下來高德地圖的可能會有關于可視化展示的記錄;還有可能就是針對百度地圖API接口記錄下接口調用過程(但也可能不會記錄,畢竟跟高德的方法是一緻的)。

       POI多邊形搜尋的自定義轉換器,下一步會進行整合将web端與Web服務整合成一個自定義轉換器。

公衆号背景回複“AmapPOIDownloader_web”。擷取自定義轉換器

如覺得有用,點贊點再看!