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中关于字符串对象的一些基础知识
Apr 08 Python
通过实例浅析Python对比C语言的编程思想差异
Aug 30 Python
matplotlib作图添加表格实例代码
Jan 23 Python
Python下使用Scrapy爬取网页内容的实例
May 21 Python
python中多层嵌套列表的拆分方法
Jul 02 Python
python numpy元素的区间查找方法
Nov 14 Python
python 图片去噪的方法示例
Jul 09 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python3自定义json逐层解析器代码
May 11 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
Python实现仓库管理系统
May 30 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
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
js修改input的type属性及浏览器兼容问题探讨与解决
2013/01/23 Javascript
javascript发送短信验证码实现代码
2015/11/12 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
vue prop属性传值与传引用示例
2019/11/13 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
Python 的 with 语句详解
2014/06/13 Python
在Django的session中使用User对象的方法
2015/07/23 Python
详解Python 2.6 升级至 Python 2.7 的实践心得
2017/04/27 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Django的models模型的具体使用
2019/07/15 Python
postman传递当前时间戳实例详解
2019/09/14 Python
Python3.5 win10环境下导入kera/tensorflow报错的解决方法
2019/12/19 Python
pytorch forward两个参数实例
2020/01/17 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
Speedo美国:澳大利亚顶尖泳衣制造商
2016/08/03 全球购物
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
群众路线教育实践活动方案
2014/02/02 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
大学老师推荐信
2014/02/25 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Python实现批量将文件复制到新的目录中再修改名称
2022/04/12 Python
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
React自定义hook的方法
2022/06/25 Javascript