![[Python]利用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的批量轉(zhuǎn)換](http://pic.xiahunao.cn/yaotu/[Python]利用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的批量轉(zhuǎn)換)
我們都知道可以使用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的轉(zhuǎn)換。那么當(dāng)我們有很多個(gè)地址與經(jīng)緯度需要批量轉(zhuǎn)換的時(shí)候應(yīng)該怎么辦呢在這里選用高德Web服務(wù)的API其中的地址/逆地址編碼可以實(shí)現(xiàn)經(jīng)緯度與地址的轉(zhuǎn)換。高德API地址地理/逆地理編碼http://lbs.amap.com/api/webservice/guide/api/georegeo坐標(biāo)轉(zhuǎn)換http://lbs.amap.com/api/webservice/guide/api/convert1.申請(qǐng)key2.坐標(biāo)轉(zhuǎn)換坐標(biāo)轉(zhuǎn)換是一類簡(jiǎn)單的HTTP接口能夠?qū)⒂脩糨斎氲姆歉叩伦鴺?biāo)GPS坐標(biāo)、mapbar坐標(biāo)、baidu坐標(biāo)轉(zhuǎn)換成高德坐標(biāo)。def transform(location): parameters {coordsys:gps,locations: location, key: XXXXXX} base http://restapi.amap.com/v3/assistant/coordinate/convert response requests.get(base, parameters) answer response.json() return answer[locations]2.地理/逆地理編碼我這里是將經(jīng)緯度轉(zhuǎn)換為地址所以選用的是逆地理編碼的接口。def geocode(location): parameters {location: location, key: XXXXXX} 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.從文件中讀取需要批量獲取的話一般是從文件中讀取數(shù)據(jù)讀取代碼如下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 datas4.完整代碼對(duì)于批量獲取我一開(kāi)始也走了很多彎路。一開(kāi)始選用javascript接口但是js接口的函數(shù)是異步返回所以可能第10行的結(jié)果跑到第15行去了一直沒(méi)有很好的解決后來(lái)才選用web接口。最后將完整代碼貼于此僅供參考。#!/usr/bin/env #-*- coding:utf-8 -*- 利用高德地圖api實(shí)現(xiàn)經(jīng)緯度與地址的批量轉(zhuǎn)換 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: XXXXXX} 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: XXXXXX} 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)注意事項(xiàng)在測(cè)試的時(shí)候一個(gè)key差不多可以下載2000-3000條數(shù)據(jù)一個(gè)賬號(hào)可以申請(qǐng)4個(gè)key。這是我自己的使用情況。所以測(cè)試的時(shí)候不用測(cè)試過(guò)多直接開(kāi)始正式爬數(shù)據(jù)才是正道。