运用python与高德api接口获取地理信息数据 |
您所在的位置:网站首页 › 高德信息采集APP › 运用python与高德api接口获取地理信息数据 |
首先先来说说解决的问题吧:获任某市内所有县区的经纬度,以及各市区之间最佳的驾车距离
我们知道,通过高德地图我们可以解决我们出行规划的几乎所有问题。 直接在app中看不到这些信息,但说明高德地图内部肯定存在着这些数据,今天我们通过python结合高德地图提供的API接口来实现我们的需求! Let’s Go!!!首先我们进入高德开放平台的主页:https://lbs.amap.com/ 先理一下思路: 首先我们目标是获取昆明市各区县之间最佳的行车距离和路线 第一步:我们需要获取数据:昆明市各区县的经纬度 第二步:通过经纬度的定位,利用高德地图提供的api以及其它功能获得到达其各区县的最佳驾驶距离和路线、 第三步:将数据保存到excle中 我们继续行动: 第一步: 通过开发者文档,查看每项服务的详细说明。我们选择web服务 产品介绍 路径规划API是一套以HTTP形式提供的步行、公交、驾车查询及行驶距离计算接口,返回JSON 或 XML格式的查询数据,用于实现路径规划功能的开发。 适用场景 无需展现地图的场景下,进行线路查询,如以线路结果页形式展现换乘方案; 根据返回线路数据,自行开发线路导航。 使用说明 第一步,申请”Web服务API”密钥(Key); 第二步,拼接HTTP请求URL,第一步申请的Key需作为必填参数一同发送; 第三步,接收HTTP请求返回的数据(JSON或XML格式),解析数据。 我们通过调用openpyxl读取县区的名称: nameList = [] # 创建一个列表用于接收数据 book = load_workbook('区域信息.xlsx') # 打开文件 nameSheet = book["data"] # 读取工作表 # 按行读取第一列,并存入列表: for row in range(1, nameSheet.max_row + 1): nameList.append(str(nameSheet["A%d" % row].value))然后接下来获取各区县的经纬度信息: for i in nameList: # 拼接请求 url1 = 'http://restapi.amap.com/v3/place/text?keywords=' + i + '&city=昆明&output=json&offset=1&page=1&key=' # 将一些符号进行URL编码 newUrl1 = parse.quote(url1, safe="/:=&?#+!$,;'@()*[]") # 发送请求 response1 = urllib.request.urlopen(newUrl1) # 读取数据 data1 = response1.read() # 解析json数据 jsonData1 = json.loads(data1) # pois→0→location得到经纬度,写入字典 dict[i] = jsonData1['pois'][0]['location'] # 拆分字符串,逗号之前是经度,逗号之后是纬度 locations = dict[i].split(",")获得具体数据如下(因数据量较小,我列举出来供大家使用): dict = {'五华区': '102.707262,25.043635', '盘龙区': '102.751643,25.116512', '官渡区': '102.748888,24.950285', '西山区': '102.664426,25.038039', '东川区': '103.187825,26.082997', '呈贡区': '102.822104,24.885738', '晋宁区': '102.595325,24.669077', '富民县': '102.497722,25.221924', '宜良县': '103.141674,24.919830', '石林彝族自治县': '103.290536,24.771761', '嵩明县': '103.043384,25.327273', '禄劝彝族苗族自治县': '102.471993,25.551768', '寻甸回族彝族自治县': '103.256559,25.558163', '安宁市': '102.478650,24.919831'}下一步,就该获取距离数据了,这一部分用的是路径规划API 服务示例 https://restapi.amap.com/v3/direction/driving?origin=116.481028,39.989643&destination=116.465302,40.004717&extensions=all&output=xml&key=我需要提交的请求: key:秘钥 origin:起点的经纬度 destination:终点的经纬度 strategy:行驶策略,我选择距离最短,代码是2 output:返回数据类型,默认json https://restapi.amap.com/v3/direction/driving?origin=起始点经纬度&destination=目的地经纬度&extensions=all&output=json&key=以下是返回的全部信息,我们暂时只需要distance距离信息 我们将获取的数据存入表格(我首先把所有区县名称录入表格,然后直接把字典中的数据全部按顺序填入表格) # 先打开我们的目标表格,再打开我们的目标表单 wb = openpyxl.load_workbook(r'C:\Users\asus\PycharmProjects\pythonProject\GaodeAPI\各区之间详细距离.xlsx') ws = wb['Sheet1'] # 取出distance_list列表中的每一个元素,openpyxl的行列号是从1开始取得,所以我这里i从1开始取 for i in range(1, len(distanceList) + 1): distance = distanceList[i-1] # 写入位置的行列号可以任意改变,这里我是从第2行开始按行依次插入第11列 ws.cell(row=i, column=3).value = distance # print("操作成功") # 保存操作 wb.save(r'C:\Users\asus\PycharmProjects\pythonProject\GaodeAPI\各区之间详细距离.xlsx')这是我通过手动+自动方式整出来的,不喜勿喷哈… |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |