用tableau可以做具体到城市的地图,但是如果想把自定义的地址(例如街区等)绘制成地图,tableau就不够用了,此时需要用到BDP来做,但是需要用到经纬度,所以在你拥有“XX市XX街道XX小区“这样的地址时,可以用python调用API接口来批量得到这批地址的经纬度,下面是详细的步骤(这里用到的地图是高德地图,简单的,5分钟就学会啦~)
如何使用API并申请key
1.因为需要用高德地图的接口,需要先申请key,先打开了解下高德的开发者文档:
https://lbs.amap.com/api/webservice/guide/api/georegeo
直接点击文档中的申请key

image.png
2.申请key

image

image

image

image

image
用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('\n')
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

image
用bdp个人版做自定义地图
打开bdp个人版,把用python转化的经纬度数据放进去,按下图操作即可

image

image

image
感谢看完这篇小白写的并不专业的文章,很希望和大家一起学习进步,欢迎骚扰~