Python百度地图API逆地理编码:经纬度转城市

有一个经纬度的excel文档,共4万多条数据。想知道每个数据对应的城市。

1. 思路:

1.首先,需要在百度地图开放平台上注册账号并创建一个应用,获取相应的开发者密钥(AK)。
2.在Python中使用requests模块发送HTTP请求,将经纬度坐标和开发者密钥作为参数传入请求URL中,请求百度地图API。
3.解析API返回的JSON数据,提取其中的城市和地址信息。
import requests
import pandas as pd
import time
import random

#通过经纬度获得城市名和城市地址(省市区)
def get_address(lat, lng, ak):
    url = f"https://api.map.baidu.com/reverse_geocoding/v3/?ak={ak}&output=json&coordtype=wgs84ll&location={lat},{lng}"
    response = requests.get(url)
    data = response.json()
    city = data['result']['addressComponent']['city']    #解析城市名
    address = data['result']['formatted_address']        #解析地址
    return city, address


#替换成自己的ak
ak = 'Your_ak'    

#读取文档
df = pd.read_excel('C:/VV/学习/读研/毕业论文/数据/中间稿/经纬度-congqing&sichuan.xlsx')

#将文档中每一行经纬度,请求接口,返回并打印数据
city_list = []
address_list = []
for index, row in df.iterrows():
    lat = row['latitude']
    lng = row['longitude']
    city1, address1 = get_address(lat, lng, ak)
    print(city1, address1)
    #将数据加入列表中
    city_list.append(city1)
    address_list.append(address1)
    sleep_time = random.uniform(0.04, 0.2)
    time.sleep(sleep_time)   #个人开发者API请求每秒最多30次,休息一下

# 将城市地址添加到 DataFrame 中
df['city'] = city_list
df['address'] = address_list

#将两列写入文档中
city_df = df[['city', 'address']]
city_df.to_excel('C:/VV/学习/读研/毕业论文/数据/中间稿/经纬度-congqing&sichuan.xlsx', index=False)

2. 每日限额

后发现个人开发者每日限制请求5000次(免费,付费无所谓)。于是每天请求一下下。修改下DataFrame中的数据范围。

#假设从文档第50001行开始,再读取5000行

#读取文档,skiprows=5000 跳过了前5000行,使用 nrows=5000 读取了5000行数据
df = pd.read_excel('C:/VV/学习/读研/毕业论文/数据/中间稿/经纬度-congqing&sichuan.xlsx', skiprows=5000, nrows=5000)

#将文档中每一行经纬度,请求接口,返回并打印数据
city_list = []
address_list = []
for index, row in df.iterrows():
    lat = row['latitude']
    lng = row['longitude']
    city1, address1 = get_address(lat, lng, ak)
    print(city1, address1)
    #将数据加入列表中
    city_list.append(city1)
    address_list.append(address1)
    sleep_time = random.uniform(0.04, 0.2)
    time.sleep(sleep_time)   #API请求每秒最多30次,休息一下

# 将城市地址添加到 DataFrame 中
df['city'] = city_list
df['address'] = address_list


# 将DataFrame中数据写入Excel文件中,从第50001行开始
with pd.ExcelWriter('C:/VV/学习/读研/毕业论文/数据/中间稿/经纬度-congqing&sichuan.xlsx') as writer:
    df[['city', 'address']].to_excel(writer, startrow=5000, index=False, header=False)

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值