今天分享如何做自定義地圖,用tableau可以做具體到城市的地圖,但是如果想把自定義的地址(例如街區等)繪製成地圖,tableau就不夠用了,此時需要用到BDP來做,但是需要用到經緯度,所以在你擁有“XX市XX街道XX小區“這樣的地址時,可以用python呼叫API介面來批次得到這批地址的經緯度,下面是詳細的步驟(這裡用到的地圖是高德地圖)
如何使用API並申請key1.因為需要用高德地圖的介面,需要先申請key,先打開了解下高德的開發者文件:
https://lbs.amap.com/api/webservice/guide/api/georegeo
2.申請key
用python把地址轉化為經緯度拿到key後,把以下程式碼放到python編輯器中執行(因為我是用地址轉化為經緯度,所以用的是http://restapi.amap.com/v3/geocode/geo
程式碼
import requests
import codecs
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
def get_location(address, i):
print(i)
url = "http://restapi.amap.com/v3/geocode/geo"
data = {
'key': '輸入自己申請的key',
'address': address
}
r = requests.post(url, data=data).json()
sheet["A{0}".format(i)].value = address.strip('')
print(r)
if r['status'] == '1':
if len(r['geocodes']) > 0:
GPS = r['geocodes'][0]['location']
sheet["B{0}".format(i)].value = '[' + GPS +']'
else:
sheet["B{0}".format(i)].value = '[]'
else:
sheet["B{0}".format(i)].value = 'none'
f = codecs.open(r"zuobiao.csv", "r", "utf-8")
i = 0
while True:
line = f.readline()
i = i + 1
if not line:
f.close()
wb.save(r"zuobiao.xlsx")
break
get_location(line, i)
用windows出現報錯:UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xbd in position 0: invalid start byte
則f = codecs.open(r"zuobiao.csv", "r", "utf-8")
改為f = codecs.open(r"zuobiao.csv", "r”)
補充,下面是我的檔案資料:zuobiao.csv
用bdp個人版做自定義地圖開啟bdp個人版,把用python轉化的經緯度資料放進去,按下圖操作即可