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开发实例分享bt种子爬虫程序和种子解析
May 21 Python
跟老齐学Python之网站的结构
Oct 24 Python
介绍Python中的__future__模块
Apr 27 Python
Python爬虫实现爬取京东手机页面的图片(实例代码)
Nov 30 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
python爬虫用mongodb的理由
Jul 28 Python
Python定时任务APScheduler安装及使用解析
Aug 07 Python
Python logging模块原理解析及应用
Aug 13 Python
Python根据字符串调用函数过程解析
Nov 05 Python
python3 实现mysql数据库连接池的示例代码
Apr 17 Python
python manim实现排序算法动画示例
Aug 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP7生产环境队列Beanstalkd用法详解
2020/05/19 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
js原型链原理看图说明
2012/07/07 Javascript
JavaScript对象的property属性详解
2014/04/01 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
Jquery修改页面标题title其它JS失效的解决方法
2014/10/31 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
vue 过滤器filter实例详解
2018/03/14 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
python 远程统计文件代码分享
2015/05/14 Python
Python实现图像几何变换
2015/07/06 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
Python装饰器用法实例总结
2018/05/26 Python
python调用支付宝支付接口流程
2019/08/15 Python
浅析python内置模块collections
2019/11/15 Python
python二维键值数组生成转json的例子
2019/12/06 Python
Python参数传递实现过程及原理详解
2020/05/14 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
JDBC操作数据库的基本流程是什么
2014/10/28 面试题
车辆维修工自我评价怎么写
2013/09/20 职场文书
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
关于赌博的检讨书
2014/01/08 职场文书
卫生巾广告词
2014/03/18 职场文书
遗嘱继承公证书
2014/04/09 职场文书
目标管理责任书
2014/04/15 职场文书
党员一帮一活动总结
2014/07/08 职场文书
2014年人民调解工作总结
2014/12/08 职场文书
计生个人工作总结
2015/02/28 职场文书
给校长的建议书作文400字
2015/09/14 职场文书
Django使用redis配置缓存的方法
2021/06/01 Redis