python⾼德地图路径规划_Python利⽤⾼德地图api实现经纬度
与地址的批量转换
Python 利⽤⾼德地图api实现经纬度与地址的批量转换
发布时间:2020-08-27 06:44:34
来源:脚本之家
阅读:217
作者:chenqin''s blog
我们都知道,可以使⽤⾼德地图api实现经纬度与地址的转换。那么,当我们有很多个地址与经纬度,需要批量转换的时候,应该怎么办呢?
在这⾥,选⽤⾼德Web服务的API,其中的地址/逆地址编码,可以实现经纬度与地址的转换。
⾼德API地址:
1.申请key
2.坐标转换
坐标转换是⼀类简单的HTTP接⼝,能够将⽤户输⼊的⾮⾼德坐标(GPS坐标、mapbar坐标、baidu坐标)转换成⾼德坐标。
def transform(location):
parameters = {'coordsys':'gps','locations': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'restapi.amap/v3/assistant/coordinate/convert'
response = (base, parameters)
answer = response.json()
return answer['locations']
2.地理/逆地理编码
我这⾥是将经纬度转换为地址,所以选⽤的是逆地理编码的接⼝。
def geocode(location):
parameters = {'location': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'restapi.amap/v3/geocode/regeo'
response = (base, parameters)
answer = response.json()python怎么读取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 = _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 = _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 = 'restapi.amap/v3/assistant/coordinate/convert'
response = (base, parameters)
answer = response.json()
return answer['locations']
def geocode(location):
parameters = {'location': location, 'key': '7ec25a9c6716bb26f0d25e9fdfa012b8'}
base = 'restapi.amap/v3/geocode/regeo'
response = (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
<_csv('locdetail.csv', index =False)
注意事项:
在测试的时候,⼀个key差不多可以下载2000-3000条数据,⼀个账号可以申请4个key。这是我⾃⼰的使⽤情况。所以,测试的时候,不⽤测试过多,直接开始正式爬数据才是正道。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持亿速云。