应用百度地图api转换地址以及生成热力图

地址转换为经纬度

这里我参考了知乎一个文章点击查看原文

首先我们在百度地图开发者平台创建一个用户,申请一个应用,值得注意的是要把ip写成0.0.0.0/0

代码

import requests
import json
from openpyxl import load_workbook # 用于读取xlsx格式文件
import csv  

def gain_location(adress):
    #这个api_url网址里的city=填你想填的城市名(非必需参数,即可删除city=xxx),ak=填入你自己的密匙,output=json意思是输出json格式
    api_url = f'http://api.map.baidu.com/geocoding/v3/?city=西安市&address={adress}&ak=AQyA0VUGmTDDGWTNOR49KlasK78uH9Ev&output=json&callback=showLocation'

    r = requests.get(api_url)
    r = r.text

    '''经历以下两次去除,使得最终结果为json格式的数据 
       原来的数据格式:showLocation&&showLocation(' showLocation&&showLocation('showLocation&&showLocation({"status":0,"result":{"location":{"lng":108.94646555063274,"lat":34.34726881662395},"precise":0,"confidence":12,"comprehension":63,"level":"城市"}})
       去除后的数据格式为将json字符串转换为字典类型:showLocation&&showLocation({"status":0,"result":{"location":{"lng":108.94646555063274,"lat":34.34726881662395},"precise":0,"confidence":12,"comprehension":63,"level":"城市"}}
    '''
    r = r.strip('showLocation&&showLocation(')
    r = r.strip(')')

    jsonData = json.loads(r) # 将json字符串转换为字典类型转为字典格式类型

    return jsonData
#××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
 
"""file = open(r'E:\\爬虫数据分析\调用百度地图api\point.json','w') #建立json数据文件
with open(r'E:\\爬虫数据分析\调用百度地图api\各区域房价.csv', 'r') as csvfile: #打开csv
    reader = csv.reader(csvfile)
    for line in reader: #读取csv里的数据
        # 忽略第一行
        if reader.line_num == 1: #由于第一行为变量名称,故忽略掉
            continue
            # line是个list,取得所有需要的值
        b = line[0].strip() #将第一列city读取出来并清除不需要字符
        c= line[1].strip()#将第二列price读取出来并清除不需要字符
        lng = getlnglat(b)['result']['location']['lng'] #采用构造的函数来获取经度
        lat = getlnglat(b)['result']['location']['lat'] #获取纬度
        str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":' + str(c) +'},'
        #print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
        file.write(str_temp) #写入文档
file.close() #保存"""

#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
file = open(r'C:\Users\Administrator\Desktop\my\论文\实验数据\point.json','w') #建立json数据文件
filename = r'C:\Users\Administrator\Desktop\my\论文\实验数据\地址.csv'
with open(filename) as f:        #将filename当作f来打开
    reader = csv.reader(f)       #创建一个reader对象将csv读进去
    header_row = next(reader)    #head_row等于next(reader),next读取reader的第一行
    
    for row in reader:           #每次读取一行,每下一个循环读取下一行
        b = row[0]
        #try:
        lng = gain_location(b)['result']['location']['lng'] #采用构造的函数来获取经度
        lat = gain_location(b)['result']['location']['lat'] #获取纬度
        str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":5' +'},'
        print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
        #except:
            #print(row[0])

需要注意的是,try/except这个很重要,在我的代码运行到地址的第七行的时候就报错了,因为我之前的地址转换为经纬度已经打印出来了,所以程序是没有问题的,这样问题只剩下是我的地址有问题了,但是问题总是一小部分,我们只需要忽略掉就好了。将我的注释符去掉即可
应用百度地图api转换地址以及生成热力图_第1张图片

for row in reader:           #每次读取一行,每下一个循环读取下一行
        b = row[0]
        try:
            lng = gain_location(b)['result']['location']['lng'] #采用构造的函数来获取经度
            lat = gain_location(b)['result']['location']['lat'] #获取纬度
            str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) + ',"count":5' +'},'
            print(str_temp) #也可以通过打印出来,把数据copy到百度热力地图api的相应位置上
        except:
            print(row[0])

结果生成出来之后,我们可以手动复制,亦可以写入文件,我图方便直接手动复制了
应用百度地图api转换地址以及生成热力图_第2张图片
这里需要注意的是我的格式,这样是为了符合百度地图的格式
应用百度地图api转换地址以及生成热力图_第3张图片
我们将实例代码复制下来,并将我们自己生成的经纬度将实例代码替换,保存成html格式,用浏览器打开即可,上图中间的代码可以设置百度地图打开之后的中心位置。
应用百度地图api转换地址以及生成热力图_第4张图片

这里我使用的是之前文章里面用到的美团商户的数据,这里有一个问题,现在没时间解决。留在这里
我在打开一个csv文件之后,报错了,我猜测可能是因为每个数据太长了,于是我就直接在vscode中打开了这个文件,将它全部删掉只剩下一个短短的“武汉火车站”,然后就出现编码错误了,于是我就把这个文件删掉了,为了重新试验所以我要找到原始的文件,我想到vscode可以直接在文件列表中找,于是我就复制了一份,这个时候vscode自动把源文件打开了,问题出来了,我再用excel打开这个文件的时候,里面全部变成了乱码,并且在vscode中打开文件,就算是没有修改,在我要在vscode中关闭它的时候会提示我要不要保存修改,综上我猜测vscode在打开csv文件的时候自动修改的编码。

你可能感兴趣的:(python_草稿,python,csv)