Python调用百度地图和高德地图API批量获取国内城市地址经纬度坐标
1 数据准备
经过尝试,百度地图API需要输入城市中文名称才能获取对应经纬度坐标,因此先将英文的城市名称转为中文
一共347个城市
由于在测试过程中发现高德和百度地图API分别有几个城市的地址无法获取经纬度,但是恰好能够互补,因此使用两种API联合获取347个国内城市的经纬度
需要注意的是该经纬度不是WGS84经纬度,有一定偏差,但是关系不大。
2 高德地图API
1 先注册成为开发者
查看地理编码的输入和返回参数:
https://lbs.amap.com/api/webservice/guide/api/georegeo
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import requests import json import pprint import pandas as pd import csv import pprint key = '**********' #填入自己的key #构建函数 def getlnglat(address): url = 'https://restapi.amap.com/v3/geocode/geo' params = { 'key' :key, 'address' :address} res = requests.get(url, params) json_data = json.loads(res.text) return json_data #打开cs inpath = r "H:\02Course\00DATA\表格\cityname.xlsx" outpath = r "H:\02Course\00DATA\表格\citylnglat_Gaode.xlsx" df = pd.read_excel(inpath,encoding = 'UTF-8' ) df[ 'lng' ] = 'collng' #创建新列存放经度 df[ 'lat' ] = 'collat' #创建新列存放纬度 for i in df.values: b = i[ 2 ] #第一列的地址 .strip("'") ind = i[ 0 ] print (b) json_data = getlnglat(b) i[ 7 ] = json_data[ 'geocodes' ][ 0 ][ 'location' ] #获取经纬度 df[ 'lng' ][ind] = float (i[ 7 ].split( "," )[ 0 ]) #经度 df[ 'lat' ][ind] = float (i[ 7 ].split( "," )[ 1 ]) #纬度 pprint.pprint(json_data) df.to_excel(outpath) |
输出结果为:
3 百度地图API
参考另一篇文章:https://www.cnblogs.com/icydengyw/p/11795998.html
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | import requests,csv import pandas as pd import json import requests import json import pprint ak = '*******' #ak需要去百度地图申请 def getlnglat(address): url = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak={}' . format (address,ak) res = requests.get(url) json_data = json.loads(res.text) return json_data inpath = r 'H:\02Course\00DATA\表格\cityname.xlsx' outpath = r 'H:\02Course\00DATA\表格\citylinlat_Baidu.xlsx' df = pd.read_excel(inpath,encoding = 'UTF-8' ) df[ 'lng' ] = 'collng' #创建新列存放经度 df[ 'lat' ] = 'collat' #创建新列存放纬度 for i in df.values: b = i[ 2 ] #第一列的地址 print (b) ind = i[ 0 ] json_data = getlnglat(b) i[ 7 ] = json_data[ 'result' ][ 'location' ][ 'lng' ] #获取经度并写入 i[ 8 ] = json_data[ 'result' ][ 'location' ][ 'lat' ] #获取纬度并写入 df[ 'lng' ][ind] = float (i[ 7 ]) df[ 'lat' ][ind] = float (i[ 8 ]) print (i) df df.to_excel(outpath) |
运行结果:
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示