最近在TABLEAU社區上有人提問,想在TABLEAU中實現調用國內百度地圖或者谷歌地圖的功能。
谷歌地圖我沒用過,以前看過《觸手可及的大數據分析工具:Tableau案例集》上面有介紹,大家可以去參考。百度地圖調用一直就沒找到方法,也略過。調用國內地圖可以用AutoNavi.tms這個文件,雙擊即可,調用的是OpenStreetMap的背景地圖,很好用,百度可以找到,坐標系應該谷歌一樣的。
另外就是想將每個店鋪的地理位置標注到地圖上。
這個功能必須要知道每個店鋪的經緯度才成,如果個別的可以通過坐標拾取器來手工獲得,我以前用過這個網站,挺好用的http://www.gpsspg.com/maps.htm。但這里就有個問題,相同的地點不同地圖的經緯度是不一樣的,這個問題大家可以百度一下,因為坐標系不一樣,用哪個地圖做背景就用哪個地圖的經緯度。
因為Tableau的國內地圖很差,如果精確描述一些坐標點,放大后基本沒有街道和道路等細節了,全是灰色的地圖。所以這就要到上面提到的OpenStreetMap地圖了。
如果是坐標點比較多,手工獲取肯定慢,這可以調用高德的API接口獲取(百度也有接口,但是百度地圖有自己獨有的坐標系,獲取到的經緯度與偏差很大,Tableau無法用),獲取后配合OpenStreetMap地圖,基本可以實現需求,感覺也有偏差,但是偏差很小可以用。
首先注冊高德的開發者權限,很簡單(如果搞不定后邊也不用看了,記得善用搜索引擎)。
各種語言的接口都有,我用python調用接口(因為我只會一點python),至于python的安裝環境的搭建,推薦安裝anaconda的安裝包,網上安裝教程很多,一路下一步即可,環境就搭建好了。然后運行下面程序即可輸出經緯度(但是不確保一定準確,因為要轉換的地址未必能找得到,高德會找近似的)。
#!/usr/bin/env python3
#-*- coding:utf-8 -*-
import requests
def geocode(address):
parameters = {'address': address, 'key': 'XXXXXXXXXX'} #申請到的高德開發者key
base = 'http://restapi.amap.com/v3/geocode/geo'
response = requests.get(base, parameters)
answer = response.json()
print(address + "的經緯度:", answer['geocodes'][0]['location'])
if __name__=='__main__':
#address就是想轉換的地址
address = ['北京市東城區東黃城根1號','北京市東城區東黃城根2號','XXXXXXX']
for a in address:
geocode(a)
也可關注公眾號:saodisir(參悟Tableau)