上一篇我们介绍微博开放平台时说道了通过高德开放平台获取地名地址的坐标,今天我们来说一说怎么使用高德开放平台查询相关关键词的地址坐标,或者采集学校、医院、餐厅、公园、企业等POI的信息。
高德开放平台提供了接口文档,本文使用的是搜索接口/api/webservice/guide/api/search,通过配置城市、关键词、POI类型等参数,查询符合条件的POI,返回该POI的名称、类型、地址、经纬度、电话等信息。
(1)首先,根据地名地址关键词查找匹配的POI,进行地名地址空间化。
使用python内置库urllib.request获取url返回的数据,用urllib.parse中的quote进行url编码,因为url中关键词是中文的话url不识别。
上图是程序的主要部分,通过搜索关键字,返回相关POI信息,包括坐标。代码也比较简单,读取csv文本文件中的关键词,通过搜索接口进行查询,返回的内容可以只保留第一个结果,不然就返回第一页对所有结果共20条,然后把返回结果存入csv文件。最后运行该函数。
(2)查询某一类型的所有POI信息
上面的程序只保存了第一页的20条数据,如果我想要某一区域的所有道路、公园或者餐厅的名称、地址和坐标呢,就需要返回所有查询的结果。这里我们使用更简洁的requests库,代替内置的urllib.request库:
首先,定义了两个函数,一个是获取url返回数据,一个是解析json数据,后面获取每一页数据要重复用到。
url中有几个参数需要注意,一个是POI的类型type,一个是城市编码city,这两个参数可以根据接口文档中的“POI分类编码和城市编码表”自己设置;citilimit=true表明限制在此城市查找,children=1表明展示子层级POI,offset=20表示每页20条,最多25条,key需要使用自己的key。参数和返回值还是要读一读接口文档。
作为个人开发者,程序别跑的太快,接口调用是有限制的,搜索的日配额是1000次。申请企业开发者就有40万次。
最后,要感谢微博、高德这些企业本着开放共享的心态公开了部分数据,可提供给数据爱好者使用。