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实现判断数组是否包含指定元素的方法
Jul 15 Python
详解python中的json的基本使用方法
Dec 21 Python
Python单元测试实例详解
May 25 Python
python实现三次样条插值
Dec 17 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
python pickle存储、读取大数据量列表、字典数据的方法
Jul 07 Python
如何使用django的MTV开发模式返回一个网页
Jul 22 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
python英语单词测试小程序代码实例
Sep 09 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
Jul 02 Python
详解Python 3.10 中的新功能和变化
Apr 28 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 cookies中删除的一般赋值方法
2011/05/07 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
对联广告js flash激活
2006/10/19 Javascript
动态载入/删除/更新外部 JavaScript/Css 文件的代码
2010/07/03 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
Vue.js学习示例分享
2017/02/05 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Vue学习笔记进阶篇之vue-router安装及使用方法
2017/07/19 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
vue element 中的table动态渲染实现(动态表头)
2019/11/21 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python检查ping终端的方法
2019/01/26 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
文员岗位职责
2013/11/09 职场文书
教师个人自我评价范文
2014/04/13 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
企业党员个人自我评价
2014/09/20 职场文书
民事辩护词范文
2015/05/21 职场文书
《打电话》教学反思
2016/02/22 职场文书