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中的自定义函数学习笔记
Sep 23 Python
python将ansible配置转为json格式实例代码
May 15 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
详解python中的json和字典dict
Jun 22 Python
python-str,list,set间的转换实例
Jun 27 Python
Python装饰器语法糖
Jan 02 Python
解决PyCharm不运行脚本,而是运行单元测试的问题
Jan 17 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
Python 实现数组相减示例
Dec 27 Python
Python如何通过Flask-Mail发送电子邮件
Jan 29 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
python如何写try语句
Jul 14 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
PHP中key和current,next的联合运用实例分析
2016/03/29 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
2020/04/13 PHP
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
JavaScript实现查找字符串中第一个不重复的字符
2014/12/29 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
Javascript 两种刷新方法以及区别和适用范围
2017/01/17 Javascript
JavaScript体验异步更好的解决办法
2018/01/08 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
详解Vue前端对axios的封装和使用
2019/04/01 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
JavaScript this关键字的深入详解
2021/01/14 Javascript
[01:15]《辉夜杯》北京网鱼队巡礼
2015/10/26 DOTA
Saltstack快速入门简单汇总
2016/03/01 Python
Python2与Python3的区别实例分析
2019/04/11 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
环保倡议书500字
2014/05/15 职场文书
国企干部对照检查材料
2014/08/22 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
北京导游词
2015/02/12 职场文书
公诉意见书范文
2015/06/05 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
创业者如何撰写出一份打动投资人的商业计划书?
2019/07/02 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL