Python 利用高德地图api实现经纬度与地址的批量转换
作者:chenqin's blog 发布时间:2021-08-13 19:52:05
标签:Python,经纬度,地址,批量转换
我们都知道,可以使用高德地图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。这是我自己的使用情况。所以,测试的时候,不用测试过多,直接开始正式爬数据才是正道。
来源:https://blog.csdn.net/u013250416/article/details/71178156


猜你喜欢
- 无论是公司的同事还是外界的程序员朋友们,大部分人对JavaScript的高级应用不甚了解,已有的知识架构里会认为JavaScript仅仅是一
- django ajax发送post请求的两种方法,具体内容如下所述:第一种:将csrf_token放在from表单里 <script&
- 使用FFmpeg命令拼接多个mp3格式的音频文件时报错抛出异常,使用命令格式如下:ffmpeg -i 1.mp3 -i 2.mp3 -fil
- PDO::commitPDO::commit提交一个事务(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)说
- 一年一度的双十一就快到了,各种砍价、盖楼、挖现金的口令将在未来一个月内充斥朋友圈、微信群中。玩过多次双十一活动的小编表示一顿操作猛如虎,一看
- # 递归满足的条件# 1.自己调用自己# 2.必须有一个明确的结束条件# 优点:逻辑简单\定义简单# 缺点:防止内存消耗过多,容易导致栈溢出
- JavaScript之点击改变图片形状(transform的应用),供大家参考,具体内容如下附上代码:<!DOCTYPE html&g
- 解析器解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程.本质就是对请求体中的数据进行解析.Content-
- 有一个查询如下: 代码如下:SELECT c.CustomerId, CompanyName FROM Customers c
- Python(包括其包Numpy)中包含了了许多概率算法,包括基础的随机采样以及许多经典的概率分布生成。我们这个系列介绍几个在机
- 在我们平时的开发过程中,为了方便调试程序,我们都是打开开发者模式,即Debug=True,当我们正式上线的时候肯定就需要把开发者模式关掉,用
- # encoding:utf-8import re # 使用正则 匹配想要的数据import requests # 使用requests得到
- 今天实现一个进度条加载过程,dom结构其实就是两个div<div class="pbar"> <div
- 英文原文:http://www.usabilitypost.com/2009/04/15/8-characteristics-of-succ
- 最近发现session的知识有点脱节了,默认设置愣是搞半天,看来忘了不少。今天把一些通用设置贴上来,以备随时回顾。配置文件中设置默认操作(通
- 一、创建项目本篇文章介绍如何将一个ASP.NET Core Web程序部署到Windows系统上。这里以ASP.NET Core WebAp
- 一个封装好的链接Mysql数据库的工具类,可以方便的获取Connection对象关闭Statement、ResultSet、Statment
- 抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢?最近都在做原生JS熟悉的练习。。。用原生Js封装了一个Ajax插件,引入一般的项
- 【1】 以XML 返回 (1)未定义属性的 select logisticsId,logisticsName from LogisticsC
- 目录什么是websocket?第一步 准备工作第二步 编写聊天室页面第三步 编写后台websocket路由及处理方法第四步 运行看效果小结C