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时区设置方法与pytz查询时区教程
Nov 27 Python
实例解析Python设计模式编程之桥接模式的运用
Mar 02 Python
python进阶之多线程对同一个全局变量的处理方法
Nov 09 Python
python画图的函数用法以及技巧
Jun 28 Python
Python 多个图同时在不同窗口显示的实现方法
Jul 07 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
postman传递当前时间戳实例详解
Sep 14 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
树莓派安装OpenCV3完整过程的实现
Oct 10 Python
postman和python mock测试过程图解
Feb 22 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
Python 文字识别
May 11 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
JavaScript实现删除电脑的关机键
2016/07/26 PHP
php和asp语法上的区别总结
2019/05/12 PHP
经验几则 推荐
2006/09/05 Javascript
一个javascript参数的小问题
2008/03/02 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
有趣的JavaScript数组长度问题代码说明
2011/01/20 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
npm 下载指定版本的组件方法
2018/05/17 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python实现扫描指定目录下的子目录及文件的方法
2014/07/16 Python
python 实现登录网页的操作方法
2018/05/11 Python
Python基于mysql实现学生管理系统
2019/02/21 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python+redis通过限流保护高并发系统
2020/04/15 Python
基于Python-Pycharm实现的猴子摘桃小游戏(源代码)
2021/02/20 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
《王二小》教学反思
2014/02/27 职场文书
班长演讲稿范文
2014/04/24 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP