【項目總結】如何獲取地圖上的所有POI


1. 地圖POI數據是什么,有什么用

   關於地圖數據123,可以參考一下這篇 https://www.zhihu.com/question/21530085/answer/18728706,回答了很多信息;下圖是摘自其中,展示了建立一個地圖需要的幾個圖層數據,從底向上依次是:衛星圖,街道信息,建築信息,地圖熱點信息;衛星圖是圖片,建築信息是幾何信息,這兩者在平時比較少使用和關心;常用的是有道路信息,可以用來做路徑規划和導航,開源地圖OpenStreetMap提供了部分道路的免費數據,http://www.openstreetmap.org/;而使用最多的,是地圖熱點信息,即POI。POI代表一個興趣點,可以是樓宇、小區、商店、銀行、學校等等,其提供的附帶信息較為豐富,常有的有“地址”、“經緯度”、“POI類型”等。很多公司都會根據用戶的消費地點或活動地點來做深入挖掘,完善用戶畫像,這時,POI信息顯得特別重要。一個很簡單的例子,當一個用戶一直出現在某學校和它周圍,那么很可能是這個學校老師或者學生。

    

 

2. 如何獲得高德地圖所有的POI

    高德地圖提供了獲取矩形范圍內所有POI列表的接口,一個請求例子如下:

http://restapi.amap.com/v3/place/polygon?polygon=108.640287,26.043184;110.579374,27.275355&key=dc44a8ec8db3f9ac82344f9aa536e678&extensions=all&offset=5&page=1

    其中polygon是矩形對角頂點,offset是每頁顯示的poi個數,page是頁碼。這樣獲得的一個POI信息如下:

{
  "id": "B000A7BD6C",
  "name": "清華大學",
  "tag": [],
  "type": "科教文化服務;學校;高等院校",
  "typecode": "141201",
  "biz_type": [],
  "address": "雙清路30號",
  "location": "116.32676,40.003305",
  "tel": "010-62782165",
  "postcode": [],
  "website": "www.tsinghua.edu.cn",
  "email": [],
  "pcode": "110000",
  "pname": "北京市",
  "citycode": "010",
  "cityname": "北京市",
  "adcode": "110108",
  "adname": "海淀區",
  "gridcode": "6016020610",
  "distance": [],
  "navi_poiid": "J50F001019_327708",
  "entr_location": "116.332936,39.996159",
  "business_area": []
}

     但是,這個矩形區域搜索接口有一個限制——每個矩形只能獲得前1000個POI,超過之后,再翻頁就沒有數據了。所以,想利用這個接口來搞定全國POI,就需要先把全國分為若干矩形,保證每個矩形之內高德地圖POI數量小於1000。還好這個接口會返回一個矩形區域內所有POI的數量,使得我可以來做這件事。

    將全國划分矩形的思路比較簡單,將全國包圍盒作為根節點,當POI超過1000時,分成4個相等小矩形,這樣遞歸下去,創建出4叉樹。今天計算后,全國、北京、上海划分結果如下圖。有了這些矩形,我就可以一個個地翻頁得到了。估算了一下,獲得高德所有POI,請求數在20萬左右,只要很少資源就可以搞定了。

    

    

    

補充20160127

   用矩形檢索的api有一個問題,就是其參數 types 和 keywords 必須兩者至少有一個,否則返回poi不全。我在拿到手一個城市的poi后,檢測發現有缺的,才發現了這個問題,然而高德在其官方文檔上並沒有說明,而是在論壇里面講的。我選擇types參數,才把一個城市抓全;抓完后發現,poi的數量確實很龐大,高德號稱全國有5000萬,我估計沒有這么多也起碼有2000萬。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM