Python调用百度地图

第一次写博客,写的不好之处,请多多谅解。

这也算从其他人那借鉴来的,为示尊重,附上原作者的链接:点击打开链接

话不多说,进入正题。

一、问题:

在百度地图对房价进行可视化

二、数据源:

house_price.csv   注意:数据名不要用中文。

链家网的上海房屋租金数据。维度:xiaoqu;mean:房屋租金均值。


三、注册百度地图:点击打开链接

1、注册开发者账户:


2、申请秘钥


3、创建应用


四、生成热力图:

1、将小区地址转换为地图上的经纬度信息。将房价数据和代码放在同一目录下。

代码如下:

# -*- coding: utf-8 -*-
import pandas as pd
import json
from urllib.request import urlopen,quote
import csv
import traceback
import os

#构造获取经纬度的函数
def getlnglat(address):
    url = 'http://api.map.baidu.com/geocoder/v2/?address='
    output = 'json'
    #ak = '你的ak'#需填入自己申请应用后生成的ak
    add = quote(address)#本文城市变量为中文,为防止乱码,先用quote进行编码
    url2 = url+add+'&output='+output+"&ak="+ak
    req = urlopen(url2)
    res  = req.read().decode()
    temp = json.loads(res)
    return temp

file = open('经纬度.json','w')#建立json数据文件
data_1 = pd.read_csv("house_price.csv")#读取小区房价信息
for i in data_1.values:
    try:
        b = i[0].strip()
        c = str(i[1]).strip()
        lng = getlnglat(b)['result']['location']['lng']#获取经度
        lat = getlnglat(b)['result']['location']['lat']#获取纬度
        str_temp = '{"lat":' + str(lat) + ',"lng":' + str(lng) +',"count":'+str(c) +'},'
        file.write(str_temp)
    except:
        f = open("异常日志.txt",'a')
        traceback.print_exc(file=f)
        f.flush()
        f.close()  
file.close()

原理:通过百度地图提供的Geocoding API接口,获得小区的经纬度。

注意:


该接口在未认证情况下,每天只能访问6k次,认证通过的每天可以请求30w次,如果大家在未认证情况下,调试程序时最好先调试好一个小区数据,再跑所有的数据。

2、生成热力图

打开http://developer.baidu.com/map/jsdemo.htm#c1_15,将源代码复制到本地代码编辑器中。注意:不要直接在文本编辑器中修改,可能会造成乱码。

修改:

(1)填写自己的秘钥ak

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script>

(2)地图中心改为上海中心坐标

var point = new BMap.Point(121.480237, 31.236305);

(3)将经纬度数据替换成之前获得的经纬度数据。保存在经纬度.json文件中,直接复制。数据最后的逗号要删掉。

var points =[    ]

(4)数据最大值设置为50000

heatmapOverlay.setDataSet({data:points,max:50000});

将源代码另存为html文件,使用浏览器打开。

结果如下:


可以看到,有一些噪音数据存在,感兴趣的朋友可以对经纬度数据进行去噪处理。

代码和数据文件放在github上:https://github.com/data-science-z/-






  • 10
    点赞
  • 120
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值