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 PyQt5标准对话框用法示例
Aug 23 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
python实现SOM算法
Feb 23 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
利用OpenCV和Python实现查找图片差异
Dec 19 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python生成器常见问题及解决方案
Mar 21 Python
Django 用户登陆访问限制实例 @login_required
May 13 Python
Python 实现一个计时器
Jul 28 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
Python之基础函数案例详解
Aug 30 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
怎样在UNIX系统下安装php3
2006/10/09 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
2017/01/21 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
利用express启动一个server服务的方法
2017/09/17 Javascript
vue-cli项目配置多环境的详细操作过程
2018/10/30 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
layui实现数据分页功能
2019/07/27 Javascript
python使用cookie库操保存cookie详解
2014/03/03 Python
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python查看多台服务器进程的脚本分享
2014/06/11 Python
简单介绍Python中的floor()方法
2015/05/15 Python
python实现机器学习之多元线性回归
2018/09/06 Python
详解Python发送email的三种方式
2018/10/18 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
如何使用python记录室友的抖音在线时间
2020/06/29 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
护士辞职信范文
2014/01/19 职场文书
环保公益广告语
2014/03/13 职场文书
《秋游》教学反思
2014/04/24 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
开除通知书范本
2015/04/25 职场文书
毕业论文答辩开场白和结束语
2015/05/27 职场文书
北京爱情故事观后感
2015/06/12 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
《詹天佑》教学反思
2016/02/20 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers