您的位置:首页 > 编程语言 > Python开发

Python调用百度地图

2018-02-28 21:46 253 查看
第一次写博客,写的不好之处,请多多谅解。
这也算从其他人那借鉴来的,为示尊重,附上原作者的链接:点击打开链接
话不多说,进入正题。
一、问题:
在百度地图对房价进行可视化
二、数据源:
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)数据最大值设置为50000heatmapOverlay.setDataSet({data:points,max:50000});将源代码另存为html文件,使用浏览器打开。
结果如下:



可以看到,有一些噪音数据存在,感兴趣的朋友可以对经纬度数据进行去噪处理。
代码和数据文件放在github上:https://github.com/data-science-z/-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息