Python 利用高德地图api实现经纬度与地址的批量转换


Posted in Python onAugust 14, 2019

我们都知道,可以使用高德地图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。这是我自己的使用情况。所以,测试的时候,不用测试过多,直接开始正式爬数据才是正道。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
Python随机生成手机号、数字的方法详解
Jul 21 Python
详解python eval函数的妙用
Nov 16 Python
python类的方法属性与方法属性的动态绑定代码详解
Dec 27 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Python比较2个时间大小的实现方法
Apr 10 Python
python实现视频分帧效果
May 31 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
python sorted函数的小练习及解答
Sep 18 Python
对Python中 \r, \n, \r\n的彻底理解
Mar 06 Python
解决import tensorflow导致jupyter内核死亡的问题
Feb 06 Python
Django如何使用第三方服务发送电子邮件
Aug 14 #Python
Python3 chardet模块查看编码格式的例子
Aug 14 #Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 #Python
python3调用windows dos命令的例子
Aug 14 #Python
python脚本执行CMD命令并返回结果的例子
Aug 14 #Python
用Python调用win命令行提高工作效率的实例
Aug 14 #Python
python基础教程之while循环
Aug 14 #Python
You might like
php+mysql结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHP编程一定要改掉的5个不良习惯
2020/09/18 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
上传的js验证(图片/文件的扩展名)
2013/04/25 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
Python3遍历目录树实现方法
2015/05/22 Python
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
python入门前的第一课 python怎样入门
2018/03/06 Python
python实现简单flappy bird
2018/12/24 Python
Python2与Python3的区别实例分析
2019/04/11 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
numpy中的meshgrid函数的使用
2019/07/31 Python
详解python中__name__的意义以及作用
2019/08/07 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
毕业自我鉴定
2013/11/05 职场文书
仓库管理计划书
2014/05/04 职场文书
开业庆典活动策划方案
2014/09/21 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
人与自然的观后感
2015/06/18 职场文书
业务员管理制度范本
2015/08/06 职场文书
离婚财产分割协议书
2015/08/11 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
MySQL锁机制
2021/04/05 MySQL
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang