python获取高德poi

最近项目中有用到调用高德地图poi数据,主要解决高德地图每次请求最多返回1000个POI信息,在这里以深圳市内中餐厅数据为例,将操作步骤整理了一下。

一、获取深圳市经纬度

1、需要在高德地图开放平台上注册账号,并且申请web服务的密钥。
2、POI分类编码和城市编码表
3、查询深圳市经纬度:登录高德地图开放平台 >> 开发支持 >> Web服务API > > 开发指南 >> API文档 >> 行政区域查询,然后根据文档说明进行操作,直接在示例中就能很快查询出深圳区域边界坐标点,也可以通过python脚本获取。
在这里插入图片描述
在这里插入图片描述
4、由于深圳是包含几个地块,我们可以将小块区域数据去除掉,获得的坐标数据中每块地的坐标串是以 | 分隔,将数据复制到world中,查找到小块区域的坐标并删除,然后剩余数据分行再复制到excel中,再在excel中进行分列操作,并添加x,y表头保存为excel 97-2013xls文件,方便下一步arcmap操作。
在这里插入图片描述
在这里插入图片描述

二、Arcmp操作将深圳市分为若干矩形区域,并获得各举行的左上即右下坐标点

1、下载Arcmap,网上可以下载到
2、打开arcmap,点击左上角 file >> add data >> add XYdata >> 选择文件>> 点击+选择上一步保存的xls文件 >> 点击ok

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、点击导出数据 >> 以shp文件保存到文件夹中 >> 点击ok >> yse

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、将点连成线:arctoolbox >> data management tools >> features >> 双击points to line >> 弹出对话框中将Export_Output_1拉入到输入框中,再选择输出位置 >> ok

在这里插入图片描述
在这里插入图片描述
将第一个图层√去掉,可以得到深圳区域边界线

在这里插入图片描述
5、绘制渔网:arctoolbox >> data management tools >> sampling >> create fishnet

在这里插入图片描述
选择输出区域,分成10行和10列,记录上下左右四个点的数据。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
渔网创建完成
6、渔网内点编辑:将其他图层去掉,右击渔网图层打开属性表,点击add field

在这里插入图片描述
在这里插入图片描述
分别增加lng_left 、lat_top 、lng_right 、lat_bot,type设置为float,精度默认即可
在这里插入图片描述
在这里插入图片描述
对每个点进行赋值,原理:将每个中线点赋值为右侧边界值。

在这里插入图片描述
在这里插入图片描述
点击 Editor >> start editing
在这里插入图片描述
选中第一列,将第一列 lng_left 赋值为:113.751453+0.08770130,第二列赋值为113.751453+0.08770131,第三列赋值为113.751453+0.08770132,以此类推,第十列赋值为113.751453+0.08770139

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再选中第一行,将第一行 lat_top 赋值为:22.861748-0.04231670 第二行赋值为 22.861748-0.04231671, 第三行赋值为22.861748-0.04231672,
以此类推,第十行赋值为22.861748-0.0423167
9
在这里插入图片描述
继续对 lng_right 进行赋值, 右边的经度等于左边经度加上差值
[lng_left] +0.0877013,lat_bot与此同理,= [lat_top] -0.0423167

在这里插入图片描述
在这里插入图片描述
赋值完成后点击保存编辑,然后点击结束编辑
在这里插入图片描述
然后需要删除多余数据点,将原本建立的深圳市边界图层打开,将边界外点位删除。删除点位同样需要点击 Editor >> start editing
在这里插入图片描述
在这里插入图片描述
将区域外的点选中删除
在这里插入图片描述
打开属性表,导出数据,选择导出 text file,导出的文件即为深圳市区域内划分为小矩阵的地点坐标

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、python处理数据

import pandas as pd
import requests

key = '***********************'   #高德地图开发者平台申请的key
keywords = "中餐厅"
types = "050100"
url_head = "https://restapi.amap.com/v3/place/polygon?"
text1 = pd.read_csv(r"C:\Users\37957\Desktop\python获取高德poi\Export_Output2.txt")  #从arcmap中导出的text文件地址
#for i in range(0, len(text1)):  #获取全部矩阵数据时,有可能超过高德地图配置的每天30000条数据限额,可选择先获取前35条,第二天再获取剩余数据
for i in range(0, 35):
	#经度和纬度用","分割,经度在前,纬度在后,坐标对用"|"分割,经纬度小数点后不得超过6位。
    con_location = str(round(text1["lng_left"][i], 6)) + ',' + str(round(text1['lat_top'][i], 6)) + '|' + str(round(
        text1['lng_right'][i], 6)) + ',' + str(round(text1['lat_bot'][i], 6))
    url_ttl = url_head + "polygon=" + con_location + "&keywords=" + keywords + "&key=" + key + "&types=" + types + "&output=json&offset=20&extensions=base"
    # rep0 = requests.get(url_ttl)
    # json0 = rep0.json()
    # count0 = json0["count"]
    print("开始进行第%d个网格的数据提取." % i)
    # print("一共%d条数据" % int(count0))
    for p in range(1, 101):  #遍历100页
        url = url_ttl + '&page=' + str(p)
        rep1 = requests.get(url)
        json1 = rep1.json()
        pois_data = json1['pois']
        for poi in pois_data:
            poi_name = str(poi["name"])
            poi_adname = str(poi["adname"])
            poi_address = str(poi.get("address", "无详细地址"))
            poi_location = str(poi["location"])
            poi_tel = str(poi.get("tel", "无联系方式"))
            poi_info = poi_name + ";" + poi_adname + ";" + poi_address + ";" + poi_location + ";" + poi_tel + "\n"
            poi_info = poi_info.encode('gbk', 'ignore').decode("gbk", "ignore")    #避免编码错误
            with open("poi_gaode.txt", 'a') as f:
                f.write(poi_info)
            print("正在写入数据...")
print("数据提取完成")

数据提取完成后,在当前目录生成的poi_gaode.txt文件即为我们需要的数据。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页