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错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
Python缓存技术实现过程详解
Sep 25 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Python文件操作函数用法实例详解
Dec 24 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
python异步Web框架sanic的实现
Apr 27 Python
python爬虫实例之获取动漫截图
May 31 Python
Python新手学习函数默认参数设置
Jun 03 Python
基于python代码批量处理图片resize
Jun 04 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简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
Yii2简单实现给表单添加验证码的方法
2016/07/18 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
JS获取后台Cookies值的小例子
2013/03/04 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
JS简单设置下拉选择框默认值的方法
2016/08/20 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
2016/12/31 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
AngularJS获取json数据的方法详解
2017/05/27 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
浅析vue中的provide / inject 有什么用处
2019/11/10 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
Python 网络编程起步(Socket发送消息)
2008/09/06 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
2019/08/29 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
Django自定义全局403、404、500错误页面的示例代码
2020/03/08 Python
Python pymsql模块的使用
2020/09/07 Python
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
手工制作的男士奢华英国鞋和服装之家:Goodwin Smith
2019/06/21 全球购物
斯洛伐克香水和化妆品购物网站:Parfemy-Elnino.sk
2020/01/28 全球购物
行政专员工作职责
2013/12/22 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
个人党性分析材料
2014/12/19 职场文书
网络营销实训总结
2015/08/03 职场文书
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers
基于docker安装zabbix的详细教程
2022/06/05 Servers