日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Python 利用高德地圖api實現經緯度與地址的批量轉換

系統 1765 0

我們都知道,可以使用高德地圖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。這是我自己的使用情況。所以,測試的時候,不用測試過多,直接開始正式爬數據才是正道。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 盐边县| 嘉兴市| 泸州市| 新晃| 义马市| 隆化县| 丹寨县| 洛宁县| 伊宁市| 大连市| 弋阳县| 通化市| 彝良县| 朝阳县| 齐河县| 大方县| 漠河县| 阿尔山市| 沾益县| 鸡泽县| 长海县| 镇雄县| 犍为县| 平昌县| 西昌市| 栾川县| 金湖县| 平湖市| 讷河市| 永善县| 永平县| 鹤庆县| 阳原县| 屯昌县| 荥阳市| 英山县| 垫江县| 龙岩市| 吴忠市| 永登县| 遵义县|