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使用新浪微博api上传图片到微博示例
Jan 10 Python
举例详解Python中循环语句的嵌套使用
May 14 Python
Python实现的最近最少使用算法
Jul 10 Python
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
Python命令行参数解析工具 docopt 安装和应用过程详解
Sep 26 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
Python configparser模块常用方法解析
May 22 Python
Python如何脚本过滤文件中的注释
May 27 Python
python能开发游戏吗
Jun 11 Python
编写python程序的90条建议
Apr 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
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
Jquery图形报表插件 jqplot简介及参数详解
2012/10/10 Javascript
js或者jquery判断图片是否加载完成实现代码
2013/03/20 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
JS实现放大、缩小及拖拽图片的方法【可兼容IE、火狐】
2016/08/23 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python动态导入模块的方法实例分析
2018/06/28 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
python中68个内置函数的总结与介绍
2020/02/24 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
东方电视购物:东方CJ
2016/10/12 全球购物
马德里竞技官方网上商店:Atletico Madrid Shop
2019/03/31 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
大学生个人自荐信
2014/02/24 职场文书
市场营销战略计划书
2014/05/06 职场文书
承诺书格式
2014/06/03 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
毕业实习感受与体会
2015/05/26 职场文书
运动会广播稿300字
2015/08/19 职场文书
使用SQL实现车流量的计算的示例代码
2022/02/28 SQL Server
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js