【项目总结】如何获取地图上的所有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万。

 

posted on 2016-01-22 15:43  sparrowjack  阅读(15972)  评论(4编辑  收藏  举报

导航