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/-






### 如何通过 Python 调用百度地图 API #### 百度地图 API 的基本概念 百度地图提供了丰富的 RESTful 接口,开发者可以通过 HTTP 请求的方式调用这些接口来获取地理编码、逆地理编码、地点检索等功能。为了使用百度地图 API,首先需要申请一个有效的 `API Key`[^1]。 #### 使用 Python 调用百度地图 POI 搜索 API 示例代码 下面是一个完整的 Python 示例代码,用于调用百度地图的 POI (Point of Interest) 搜索 API: ```python import requests def baidu_map_poi_search(api_key, query, region, page_num=0, page_size=10): """ 调用百度地图POI搜索API :param api_key: 百度地图API密钥 :param query: 查询关键词 :param region: 查询区域(城市名) :param page_num: 当前页码,默认第一页 :param page_size: 每页显示的结果数,默认10条 :return: 返回查询结果 """ url = f"http://api.map.baidu.com/place/v2/search" params = { "ak": api_key, "query": query, "region": region, "output": "json", "page_num": page_num, "page_size": page_size } response = requests.get(url, params=params) data = response.json() return data if __name__ == "__main__": # 替换为自己的API Key YOUR_API_KEY = "your_api_key_here" result = baidu_map_poi_search(YOUR_API_KEY, "餐馆", "北京") print(result) ``` 上述代码实现了对指定区域内特定类型的兴趣点进行搜索的功能。其中,参数说明如下: - `api_key`: 用户申请的百度地图 API 密钥。 - `query`: 关键词,例如 “餐馆” 或者其他感兴趣的内容。 - `region`: 地区名称,例如 “北京”。 - `page_num`: 结果分页编号,从 0 开始计数。 - `page_size`: 单次请求返回的最大记录数量,最大支持 20 条。 #### 数据处理与注意事项 当调用百度地图 API 获取大量数据时,可能单次请求无法满足需求。此时可以采用分区策略,比如按照行政区划或者自定义几何范围拆分目标区域[^5]。对于更复杂的场景,则需结合实际业务逻辑设计合适的 URL 构造方案。 另外,在开发过程中务必妥善保管个人账户下的 API Key ,防止泄露造成不必要的经济损失或违规行为风险[^4]。 #### 总结 借助于强大的 Web Services 和简洁易懂的设计理念,百度地图 REST API 提供了一种高效便捷的方式来集成地理位置信息服务到应用程序之中[^2]。而 Python 凭借其灵活多样的库支持以及简单明了的语法结构成为了一个理想的选择工具之一[^3]。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值