(python+BDP)有地址了,怎么做好看的地图?

用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

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

你可能感兴趣的:((python+BDP)有地址了,怎么做好看的地图?)