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实现过滤单个Android程序日志脚本分享
Jan 16 Python
python中self原理实例分析
Apr 30 Python
Python Requests 基础入门
Apr 07 Python
Python 类与元类的深度挖掘 I【经验】
May 06 Python
python爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
Python检测网络延迟的代码
May 15 Python
Python爬虫设置代理IP(图文)
Dec 23 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
变长双向rnn的正确使用姿势教学
May 31 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
在PHP3中实现SESSION的功能(一)
2006/10/09 PHP
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
js实现canvas图片与img图片的相互转换的示例
2017/08/31 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python函数式编程
2017/07/20 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
详解Python locals()的陷阱
2019/03/26 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
Python如何计算语句执行时间
2019/11/22 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
亚洲在线旅行门户网站:Expedia.com.hk(智游网)
2020/04/14 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
2014年体育部工作总结
2014/11/13 职场文书
工作经历证明范本
2015/06/15 职场文书
公司处罚决定书
2015/06/24 职场文书
社区志愿者服务心得体会
2016/01/22 职场文书
2019年最新版见习人员管理制度!
2019/07/08 职场文书
Python字典的基础操作
2021/11/01 Python
python神经网络ResNet50模型
2022/05/06 Python