Python调用百度地图和高德地图API批量获取国内城市地址经纬度坐标

1 数据准备

经过尝试,百度地图API需要输入城市中文名称才能获取对应经纬度坐标,因此先将英文的城市名称转为中文

一共347个城市

由于在测试过程中发现高德和百度地图API分别有几个城市的地址无法获取经纬度,但是恰好能够互补,因此使用两种API联合获取347个国内城市的经纬度

需要注意的是该经纬度不是WGS84经纬度,有一定偏差,但是关系不大。

2 高德地图API

1 先注册成为开发者

https://lbs.amap.com/  

查看地理编码的输入和返回参数:

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)

运行结果:

 

 

posted @   icydengyw  阅读(6767)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示