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 相关文章推荐
python3.0 字典key排序
Dec 24 Python
python字典的遍历3种方法详解
Aug 10 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
wxPython实现分隔窗口
Nov 19 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
使用python实现数组、链表、队列、栈的方法
Dec 20 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
用pytorch的nn.Module构造简单全链接层实例
Jan 14 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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的文章管理系统(二)
2006/10/09 PHP
PHP 类型转换函数intval
2009/06/20 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php实现的pdo公共类定义与用法示例
2017/07/19 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
javascript函数中的arguments参数
2010/08/01 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
JavaScript实现把rgb颜色转换成16进制颜色的方法
2015/06/01 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
jQuery获取元素父节点的方法
2016/06/21 Javascript
JavaScript暂停和继续定时器的实现方法
2016/07/18 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python如何求解两数的最大公约数
2018/09/27 Python
使用python判断jpeg图片的完整性实例
2019/06/10 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Django 批量插入数据的实现方法
2020/01/12 Python
Python3的socket使用方法详解
2020/02/18 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
标记环介质访问控制协议
2016/03/27 面试题
文明礼仪小标兵事迹
2014/01/12 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
入职担保书范文
2014/05/21 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
《雷雨》教学反思
2016/02/20 职场文书