Python調用百度地圖和高德地圖API批量獲取國內城市地址經緯度坐標


1 數據准備

經過嘗試,百度地圖API需要輸入城市中文名稱才能獲取對應經緯度坐標,因此先將英文的城市名稱轉為中文

一共347個城市

由於在測試過程中發現高德和百度地圖API分別有幾個城市的地址無法獲取經緯度,但是恰好能夠互補,因此使用兩種API聯合獲取347個國內城市的經緯度

需要注意的是該經緯度不是WGS84經緯度,有一定偏差,但是關系不大。

2 高德地圖API

1 先注冊成為開發者

https://lbs.amap.com/  

查看地理編碼的輸入和返回參數:

https://lbs.amap.com/api/webservice/guide/api/georegeo

 代碼如下:

import requests
import json
import pprint
import pandas as pd
import csv
import pprint

key='**********' #填入自己的key
#構建函數
def getlnglat(address):
    url='https://restapi.amap.com/v3/geocode/geo'
    params = {'key':key,
          'address':address}
    res = requests.get(url, params)
    json_data = json.loads(res.text)
    return json_data

#打開cs
inpath=r"H:\02Course\00DATA\表格\cityname.xlsx"
outpath=r"H:\02Course\00DATA\表格\citylnglat_Gaode.xlsx"
df = pd.read_excel(inpath,encoding = 'UTF-8')
df['lng'] = 'collng'#創建新列存放經度
df['lat'] = 'collat'#創建新列存放緯度
for i in df.values:
    b = i[2]  #第一列的地址 .strip("'")
    ind=i[0]
    print(b)
    json_data=getlnglat(b)
    i[7] = json_data['geocodes'][0]['location']#獲取經緯度
    df['lng'][ind]=float(i[7].split(",")[0])#經度
    df['lat'][ind]=float(i[7].split(",")[1])#緯度
    pprint.pprint(json_data)
df.to_excel(outpath)

輸出結果為:

 

3 百度地圖API

 參考另一篇文章:https://www.cnblogs.com/icydengyw/p/11795998.html

代碼如下:

import requests,csv
import pandas as pd
import json
import requests
import json
import pprint
ak = '*******'#ak需要去百度地圖申請

def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak={}'.format(address,ak)
    res = requests.get(url)
    json_data = json.loads(res.text)
    return json_data

inpath=r'H:\02Course\00DATA\表格\cityname.xlsx'
outpath=r'H:\02Course\00DATA\表格\citylinlat_Baidu.xlsx'
df = pd.read_excel(inpath,encoding = 'UTF-8')
df['lng'] = 'collng'#創建新列存放經度
df['lat'] = 'collat'#創建新列存放緯度
for i in df.values:
    b = i[2]  #第一列的地址 
    print(b)
    ind=i[0]
    json_data=getlnglat(b)
    i[7] = json_data['result']['location']['lng']#獲取經度並寫入
    i[8] = json_data['result']['location']['lat']#獲取緯度並寫入
    df['lng'][ind]=float(i[7])
    df['lat'][ind]=float(i[8])
    print(i)
df
df.to_excel(outpath)

運行結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM