Python 利用高德地图api实现经纬度与地址的批量转换
作者:chenqin's blog 时间:2021-08-13 19:52:05
我们都知道,可以使用高德地图api实现经纬度与地址的转换。那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢?
在这里,选用高德Web服务的API,其中的地址/逆地址编码,可以实现经纬度与地址的转换。
高德API地址:
地理/逆地理编码:http://lbs.amap.com/api/webservice/guide/api/georegeo
坐标转换:http://lbs.amap.com/api/webservice/guide/api/convert
1.申请key
2.坐标转换
坐标转换是一类简单的HTTP接口,能够将用户输入的非高德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成高德坐标。
def transform(location):
parameters = {'coordsys':'gps','locations': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'http://restapi.amap.com/v3/assistant/coordinate/convert'
response = requests.get(base, parameters)
answer = response.json()
return answer['locations']
2.地理/逆地理编码
我这里是将经纬度转换为地址,所以选用的是逆地理编码的接口。
def geocode(location):
parameters = {'location': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'http://restapi.amap.com/v3/geocode/regeo'
response = requests.get(base, parameters)
answer = response.json()
return answer['regeocode']['addressComponent']['district'].encode('gbk','replace'),answer['regeocode']['formatted_address'].encode('gbk','replace')
3.从文件中读取
需要批量获取的话,一般是从文件中读取数据,读取代码如下:
def parse():
datas = []
totalListData = pd.read_csv('locs.csv')
totalListDict = totalListData.to_dict('index')
for i in range(0, len(totalListDict)):
datas.append(str(totalListDict[i]['centroidx']) + ',' + str(totalListDict[i]['centroidy']))
return datas
4.完整代码
对于批量获取,我一开始也走了很多弯路。一开始选用javascript接口,但是js接口的函数是异步返回,所以可能第10行的结果跑到第15行去了,一直没有很好的解决,后来才选用web接口。最后,将完整代码贴于此,仅供参考。
#!/usr/bin/env
#-*- coding:utf-8 -*-
'''
利用高德地图api实现经纬度与地址的批量转换
'''
import requests
import pandas as pd
import time
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def parse():
datas = []
totalListData = pd.read_csv('locs.csv')
totalListDict = totalListData.to_dict('index')
for i in range(0, len(totalListDict)):
datas.append(str(totalListDict[i]['centroidx']) + ',' + str(totalListDict[i]['centroidy']))
return datas
def transform(location):
parameters = {'coordsys':'gps','locations': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'http://restapi.amap.com/v3/assistant/coordinate/convert'
response = requests.get(base, parameters)
answer = response.json()
return answer['locations']
def geocode(location):
parameters = {'location': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'http://restapi.amap.com/v3/geocode/regeo'
response = requests.get(base, parameters)
answer = response.json()
return answer['regeocode']['addressComponent']['district'].encode('gbk','replace'),answer['regeocode']['formatted_address'].encode('gbk','replace')
if __name__=='__main__':
i = 0
count = 0
df = pd.DataFrame(columns=['location','detail'])
#locations = parse(item)
locations = parse()
for location in locations:
dist, detail = geocode(transform(location))
df.loc[i] = [dist, detail]
i = i + 1
df.to_csv('locdetail.csv', index =False)
注意事项:
在测试的时候,一个key差不多可以下载2000-3000条数据,一个账号可以申请4个key。这是我自己的使用情况。所以,测试的时候,不用测试过多,直接开始正式爬数据才是正道。
来源:https://blog.csdn.net/u013250416/article/details/71178156
标签:Python,经纬度,地址,批量转换
0
投稿
猜你喜欢
keras 多任务多loss实例
2022-09-21 12:49:33
python防止栈溢出的实例讲解
2022-07-31 17:17:15
详解python基础中的for循环
2021-04-23 07:42:11
MobaXterm入门使用教程
2023-11-23 12:26:53
MySQL数据库对dvbbs.php全文搜索的完全分析
2010-06-11 13:25:00
Python字典创建 遍历 添加等实用基础操作技巧
2021-05-23 22:22:31
Python中使用PDB库调试程序
2022-02-24 11:25:49
python调用系统ffmpeg实现视频截图、http发送
2021-05-20 13:18:53
python的等深分箱实例
2022-11-30 01:01:20
Python机器学习之实现模糊照片人脸恢复清晰
2021-02-13 09:56:53
python连接、操作mongodb数据库的方法实例详解
2024-01-12 13:44:40
python 基于opencv实现图像增强
2023-03-20 21:04:32
浅谈Pycharm最有必要改的几个默认设置项
2021-10-13 05:33:38
python socket模块创建和使用套接字示例详解
2021-12-30 13:05:49
php+mysql查询优化简单实例
2023-07-21 18:36:32
Python图像读写方法对比
2022-10-07 08:13:46
为FCKeditor2.6添加行距功能(最新修改)
2008-08-18 21:09:00
CentOS 7下部署php7.1和开启MySQL扩展的方法教程
2023-11-19 11:58:09
python中return如何写
2023-11-17 21:44:56
Python实现数据集划分(训练集和测试集)
2022-11-29 23:54:11