【项目总结】如何获取地图上的所有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) 编辑 收藏 举报