[Python]利用高德地图api实现经纬度与地址的批量转换

原创 2017年05月04日 20:23:03

我们都知道,可以使用高德地图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获取高德地图POI

# -*- encoding: utf-8 -*-# coding:utf-8 from xlwt import Workbook from tempfile import TemporaryFile...
  • yu422560654
  • yu422560654
  • 2016年08月28日 20:28
  • 4220

基于python和amap(高德地图)web api的爬虫,用于搜索某POI点

目的: 通过Python实现的爬虫技术,及高德地图提供的web api,来获取地图上的POI点及其相关信息 方法: 1.通过Python的urllib模块来处理网络请求和响应,向高德地图发送请求,并接...
  • NIUBINGWEI
  • NIUBINGWEI
  • 2016年03月09日 09:06
  • 7621

高德API+Python解决租房问题

高德API+Python解决租房问题 一、课程介绍 1. 课程背景 课程来自一段租房血泪史(夸张):事情是这样的,笔者是接着念大四准备考研,而室友是应届毕业在找工作,说白了就是都没有...
  • xinkexueguanli
  • xinkexueguanli
  • 2016年09月16日 01:10
  • 2206

经纬度地址转换的方法集合(Python描述)

Python 2.7 IDE Pycharm 5.0.3 Geopy 1.11前言这只是我想做的一部分,写一块太大了,单独记录 目的获取2015年GDP TOP100城市并获取城市对应经纬度,存入...
  • MrLevo520
  • MrLevo520
  • 2016年09月16日 17:16
  • 3281

Python将地址转换成经纬度

  • 2015年12月01日 15:53
  • 3KB
  • 下载

地图服务中地址和经纬度的互相转换

Google Geocoding API 请求必须采用以下形式: http://maps.google.com/maps/api/geocode/output?parameters 中,outpu...
  • newjueqi
  • newjueqi
  • 2012年11月19日 19:00
  • 4196

python利用百度API进行地理编码(将地名转换为经纬度信息)

python利用百度API进行地理编码(将地名转换为经纬度信息)本文章通过讲解如何在百度地图API申请密钥,然后在python中调用API接口将自有数据中的地名转换为经纬度坐标。...
  • qq_23926575
  • qq_23926575
  • 2017年05月20日 10:31
  • 2591

Python: 百度API实现火星坐标转百度坐标

以下是我写的调用百度API将火星坐标转换成百度坐标的python代码: # -*- coding: utf-8 -*- import sys reload(sys) sys.setdefa...
  • u012486361
  • u012486361
  • 2016年08月19日 11:42
  • 125

百度、谷歌高德等网络地图经纬度偏差纠正以及相关坐标系问题

根据经验得到的: (1)百度地图的差别是(0.01185,-0.00328) 如果百度地图的经纬度是(x,y)实际的应该是(x,y)+(-0.01185,-0.00328)=(...
  • xjbclz
  • xjbclz
  • 2016年09月03日 16:32
  • 5422

抓取高德地图数据_whsgzcy_两个太平洋_郑传余

  • 2016年12月18日 16:43
  • 30KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Python]利用高德地图api实现经纬度与地址的批量转换
举报原因:
原因补充:

(最多只允许输入30个字)