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

作者:chenqin's blog 时间:2021-08-13 19:52:05 

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

标签:Python,经纬度,地址,批量转换
0
投稿

猜你喜欢

  • php多进程中的阻塞与非阻塞操作实例分析

    2023-11-14 23:43:44
  • python下载图片实现方法(超简单)

    2021-12-21 02:17:07
  • 列表模块是否需要标题

    2009-06-25 14:11:00
  • 在ASP.NET 2.0中操作数据之四十:自定义DataList编辑界面

    2023-07-07 04:45:20
  • “尊重”设计师?

    2009-03-23 18:14:00
  • 修改 Navicat 默认备份路径

    2009-08-23 21:10:00
  • 页面自动刷新javascript代码大全

    2010-06-28 18:54:00
  • python中redis的安装和使用

    2021-02-21 23:19:44
  • python os.path模块使用方法介绍

    2023-08-03 18:02:32
  • python实战之德州扑克第三步-比较大小

    2022-01-01 22:27:11
  • php查找指定目录下指定大小文件的方法

    2023-09-03 17:53:36
  • 使用python把xmind转换成excel测试用例的实现代码

    2022-12-21 06:21:34
  • python socket多线程通讯实例分析(聊天室)

    2022-11-21 13:18:58
  • 使用python turtle画高达

    2021-11-05 20:47:48
  • Django admin组件的使用

    2021-05-20 06:03:08
  • asp IsValidEmail 验证邮箱地址函数(email)

    2011-03-03 10:42:00
  • Python爬虫基础之简单说一下scrapy的框架结构

    2022-01-04 23:19:00
  • jQuery技巧

    2009-09-27 12:28:00
  • python之用Numpy和matplotlib画一个魔方

    2022-10-21 16:12:48
  • Python 常用模块 re 使用方法详解

    2021-02-23 13:10:19
  • asp之家 网络编程 m.aspxhome.com