最近在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)