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提取html文件中的特定数据的实现代码
Mar 24 Python
python实现apahce网站日志分析示例
Apr 02 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
浅谈Tensorflow模型的保存与恢复加载
Apr 26 Python
python无限生成不重复(字母,数字,字符)组合的方法
Dec 04 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
python中sort和sorted排序的实例方法
Aug 26 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
python lambda的使用详解
Feb 26 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 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中读写文件实现代码
2011/10/20 PHP
使用Sphinx对索引进行搜索
2013/06/25 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
分享经典的JavaScript开发技巧
2015/11/21 Javascript
EasyUi 打开对话框后控件赋值及赋值后不显示的问题解决办法
2017/01/19 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
node.js实现登录注册页面
2017/04/08 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
2017/07/28 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python中self原理实例分析
2015/04/30 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Python如何定义有可选参数的元类
2020/07/31 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
婴儿地球:Baby Earth
2018/12/25 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
西门豹教学反思
2014/02/04 职场文书
家长学校工作方案
2014/05/07 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
月考总结与反思
2015/10/22 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL