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萬。
