高德开放平台提供了搜索POI功能,可以调用API来获取兴趣点的地理位置信息。本篇尝试用python获取高德POI并生成GIS常用shp文件。需要用的库有urllib3(或者request),json,以及用来生成shp的pandas和geopandas。
1. 申请高德开放平台Web服务API的key,个人开发者注意配额管理别超了额度和并发量,可以氪金增加额度。
2. 每次请求API最多返回对应区域内1000个POI信息,为了获取区域所有的POI,一般要划分区域或者划分多边形来获取。如果获取POI的数量大概不多,1000个都不到,按县来进行关键字搜索即可;如果数量比较多,需要用多边形搜索。
3. 平台还提供了POI分类编码和城市编码,用来选择类别和区域,用这个编码搜索会更准确。
1 关键字搜索
找出想要的POI编码,例如'140100'即为博物馆的POI。把想要的区域做成一个列表,例如['440303','440304']即为深圳罗湖区和福田区。另外还需要注意的是获取的POI坐标系是GCJ02,可以自行转换坐标系。
# get_Amap_POI('高德key','POI分类编码',[城市编码的列表],生成shp的路径名称)
def get_Amap_POI(key, types, location_list, shpname):
poi_dict = {'id':[],'name':[],'type':[],'address':[],'lon':[],'lat':[]}
print ('getting data...')
for location in location_list:
# count: number of POI in the page;
count, page_index = 1,1
while count != 0:
parameters = "key={}&keywords={}&city={}&citylimit=true&output=JSON&page={}".format(key,types,location,page_index)
url = "https://restapi.amap.com/v3/place/text?" + parameters
http = urllib3.PoolManager()
response = http.request('GET', url, timeout = 5.0)
jsonDat