热线电话:13121318867

登录
首页大数据时代【CDA干货】经纬度热力图:从离散坐标到空间密度的可视化方法
【CDA干货】经纬度热力图:从离散坐标到空间密度的可视化方法
2025-12-04
收藏

在城市规划、物流配送、文旅分析等场景中,经纬度热力图是解读空间数据的核心工具——它能将零散的GPS坐标(如外卖订单地址、景区打卡点、车辆定位)转化为色彩渐变的密度分布图,直观呈现“哪里是热点、哪里是冷区”。小到门店选址的客群密度分析,大到城市交通流量的宏观研判,经纬度热力图都能让空间规律从抽象的坐标数字中显现。本文将从核心原理、准备工作、主流生成方法到实战优化,完整拆解经纬度热力图的生成逻辑。

一、核心认知:经纬度热力图的本质是“核密度可视化”

经纬度热力图并非简单的“点的叠加”,而是基于核密度估计(Kernel Density Estimation,KDE) 的空间插值技术。其核心逻辑是:将每个经纬度点视为“能量源”,以该点为中心向周边扩散形成密度值,所有点的密度值叠加后,用颜色深浅(或亮度)表示区域内的点密度——颜色越深,代表该区域经纬度点的分布越密集。

1. 核密度估计的核心公式

设数据集包含n个经纬度点,坐标为 为经度, 为纬度, ),则空间中任意位置 的核密度值 计算公式为:

其中关键参数说明:

  • :核函数(常用高斯核、矩形核、Epanechnikov核),决定“密度扩散”的形状,高斯核因平滑性好成为热力图首选,公式为

  • :带宽(Bandwidth),即“扩散半径”—— 越大,热力图越平滑(细节模糊); 越小,热力图越精细(易出现噪点),是影响热力图效果的核心参数。

2. 经纬度热力图的核心特征

  • 连续型可视化:将离散的坐标点转化为连续的密度面,弥补“点分布稀疏区域”的信息空白;

  • 坐标依赖性:需基于统一的地理坐标系(如WGS84、GCJ02),否则会出现位置偏移;

  • 尺度敏感性:同一批数据,地图缩放级别不同,热力图呈现的热点范围也不同。

二、生成前的核心准备工作

经纬度热力图的生成效果,70%取决于数据预处理和工具选型。在动手生成前,需完成三大核心准备:

1. 数据准备与清洗:确保坐标“有效且统一”

(1)数据格式要求

核心字段需包含:经度(longitude)、纬度(latitude),可选字段(如订单量、人流量)可作为“权重”(加权热力图)。常见数据格式为CSV、Excel、JSON,示例如下:

经度 纬度 订单量 区域
116.404 39.915 120 北京东城区
116.418 39.920 85 北京西城区

(2)关键清洗步骤

  • 坐标校验:剔除超出合理范围的异常值(如经度不在 、纬度不在 的国内坐标);

  • 去重:删除重复的经纬度点(如同一用户多次定位的重复记录);

  • 坐标系转换:统一坐标体系——

    • WGS84:GPS原始坐标,国际通用;

    • GCJ02:国测局加密坐标,高德/腾讯地图使用;

    • BD09:百度地图加密坐标;

    若坐标体系不统一,需通过转换公式或API(如高德地图坐标转换接口)校准,避免热力图位置偏移。

2. 工具选型:按场景选对方法

不同场景下的工具选择差异显著,核心工具可分为三类:

工具类型 代表工具 适用场景 核心优势
代码开发类 Python(Folium/Matplotlib) 定制化需求高、需批量生成/自动化 灵活性强、可自定义核函数/带宽
可视化工具类 Tableau/Power BI 非技术人员、快速生成交互式热力图 零代码、操作简单、支持一键导出
地图API类 高德/百度/腾讯地图API 嵌入网页/APP、需在线交互 底图丰富、支持移动端适配

三、主流生成方法:从代码到工具的完整落地

方法1:Python代码生成(最灵活,支持定制)

Python是经纬度热力图的主流开发工具,核心库包括:

  • Folium:生成交互式网页热力图,支持叠加高德/百度底图;

  • Matplotlib/Seaborn:生成静态热力图,适合报告/论文;

  • Geopandas:处理地理空间数据,适配复杂边界的热力图

实战:用Folium生成交互式经纬度热力图

步骤1:环境安装

pip install folium pandas numpy

步骤2:核心代码(以北京外卖订单数据为例)

import folium
from folium.plugins import HeatMap
import pandas as pd

# 1. 读取经纬度数据(CSV格式)
df = pd.read_csv("beijing_order.csv")
数据清洗:剔除异常坐标
df = df[(df['经度'] >= 116) & (df['经度'] <= 117) & (df['纬度'] >= 39.5) & (df['纬度'] <= 40.5)]
# 提取经纬度+权重(订单量),格式为[[纬度1, 经度1, 权重1], [纬度2, 经度2, 权重2]]
heat_data = [[row['纬度'], row['经度'], row['订单量']] for index, row in df.iterrows()]

# 2. 初始化地图(中心点为北京天安门,缩放级别12)
m = folium.Map(location=[39.9042116.4074], zoom_start=12, tiles='OpenStreetMap')

# 3. 添加热力图
HeatMap(
    heat_data,
    min_opacity=0.2,  # 最小透明度
    max_val=df['订单量'].max(),  # 最大权重值
    radius=15,  # 扩散半径(对应核密度带宽h)
    blur=10,    # 模糊程度
    gradient={0.2'blue'0.4'green'0.6'yellow'0.8'orange'1'red'}  # 颜色渐变
).add_to(m)

# 4. 保存为HTML文件(可直接在浏览器打开)
m.save("beijing_order_heatmap.html")

代码关键参数解读

  • radius:对应核密度估计的带宽 ,值越大热点越分散,建议根据数据密度调整(城市级数据取10-20,区县级取5-10);

  • gradient:颜色映射规则,需遵循“冷色(蓝)→暖色(红)”的视觉习惯,避免颜色跳跃;

  • max_val:权重最大值,决定颜色渐变的基准,若不设置会自动以数据最大值为基准。

方法2:Tableau生成(零代码,快速可视化)

适合非技术人员快速生成热力图,无需编写代码,步骤如下:

步骤1:导入数据

将包含经纬度的CSV/Excel文件导入Tableau,Tableau会自动识别“经度”“纬度”字段为地理角色。

步骤2:配置热力图

  1. 将“经度”拖至“列”,“纬度”拖至“行”,Tableau自动生成地图底图;

  2. 将权重字段(如订单量)拖至“标记”卡的“颜色”和“大小”;

  3. 在“标记”卡中选择“密度图”(即热力图),调整“颜色渐变”“不透明度”;

  4. 右键地图→“地图选项”,可切换底图(如高德地图、卫星图),设置缩放级别。

步骤3:导出与交互

支持导出为PNG/PDF,或发布至Tableau Server实现在线交互,适合业务汇报场景。

方法3:地图API生成(嵌入网页/APP)

若需将热力图嵌入自有网页或APP,可使用高德/百度地图API,以高德地图为例:

步骤1:申请API密钥

登录高德开放平台,创建应用并获取Web端API Key。

步骤2:前端代码实现

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>高德地图热力图</title>
    <!-- 引入高德地图JS API -->
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=你的API Key"></script>
    <!-- 引入热力图插件 -->
    <script type="text/javascript" src="https://webapi.amap.com/plugins/AMap.HeatMap.js"></script>
    <style>
        #map {width1000pxheight600px;}
    
</style>
</head>
<body>
    <div id="map"></div>
    <script type="text/javascript">
        // 1. 初始化地图
        var map = new AMap.Map('map', {
            center: [116.40439.915], // 北京中心点
            zoom12
        });
        // 2. 经纬度数据(格式:[经度, 纬度, 权重])
        var heatData = [
            [116.40439.915120],
            [116.41839.92085],
            [116.42539.93095]
        ];
        // 3. 创建热力图
        var heatmap = new AMap.HeatMap(map, {
            data: heatData,
            radius20// 扩散半径
            opacity: [0.20.8], // 透明度范围
            gradient: { // 颜色渐变
                0.2'blue',
                0.4'green',
                0.6'yellow',
                0.8'orange',
                1.0'red'
            }
        });
    
</script>
</body>
</html>

四、热力图优化技巧:让热点更“易读”

生成基础热力图后,需通过优化提升可读性,核心技巧如下:

1. 带宽(radius)适配:按数据密度调整

  • 样本量小(<1000个点):减小radius(5-10),避免热点过度扩散;

  • 样本量大(>10000个点):增大radius(15-25),突出宏观热点;

  • 分层展示:对核心城区和郊区采用不同带宽,避免郊区稀疏点掩盖城区热点。

2. 颜色映射优化:符合视觉认知

  • 避免使用高对比度颜色(如红→绿),防止视觉疲劳;

  • 为色盲人群适配:采用“亮度渐变”而非“色相渐变”,如浅蓝→深蓝;

  • 标注关键阈值:在热力图旁添加色阶标尺,标注“50单/平方公里”“100单/平方公里”等数值,避免仅靠颜色判断。

3. 边界裁剪:聚焦核心区域

  • 用行政边界(如区县轮廓)裁剪热力图,剔除区域外的无效密度值;

  • Python中可通过Geopandas加载SHP边界文件,限制热力图绘制范围:

    import geopandas as gpd
    # 加载北京东城区边界SHP文件
    boundary = gpd.read_file("dongcheng.shp")
    # 仅绘制边界内的热力图
    heatmap = HeatMap(heat_data).add_to(m)
    folium.GeoJson(boundary).add_to(m)

4. 加权优化:体现数据差异

  • 若经纬度点有不同权重(如订单量、人流量),需将权重纳入核密度计算,避免“单点多量”被误判为“多点少量”;

  • Python中Folium的HeatMap已原生支持权重参数,只需在数据中加入第三列即可。

五、实战案例:城市共享单车停放点热力图

案例背景

分析某城市共享单车停放点的密度分布,识别“停车热点”和“停车缺口”,为共享单车投放提供依据。

核心步骤

  1. 数据准备:获取3万条共享单车停放经纬度数据(含停放次数权重);

  2. 数据清洗:剔除坐标异常值(如郊区无效定位点),统一为GCJ02坐标系;

  3. 生成热力图:用Folium设置radius=10,gradient为蓝→黄→红,叠加城市行政区边界;

  4. 结果解读

    • 热点区域:地铁口、商圈(颜色红),停放次数超200次/天,需增加投放;

    • 冷区:老旧小区(颜色蓝),停放次数不足50次/天,需减少投放;

  5. 决策落地:基于热力图调整投放策略,热点区域增加20%车辆,冷区减少15%车辆。

六、避坑指南:常见问题与解决方案

1. 热力图位置偏移:坐标系不统一

  • 问题:用WGS84坐标在百度地图生成热力图,位置偏西/偏北;

  • 解决方案:通过API(如高德坐标转换接口)将WGS84转为BD09/GCJ02,转换公式示例:

    # WGS84转GCJ02核心公式(简化版)
    def wgs2gcj(lng, lat):
    # 详细转换系数需参考国测局标准
    delta_lng = 0.0065 + 0.002*lat - 0.001*lng
    delta_lat = 0.006 + 0.001*lng - 0.002*lat
    return lng + delta_lng, lat + delta_lat

2. 热力图噪点多:带宽过小/样本量少

  • 问题:热力图呈现大量孤立红点,无明显连续热点;

  • 解决方案:增大radius值,或对数据进行降采样(如按100米网格聚合经纬度点)。

3. 热点不明显:权重未归一化

  • 问题:部分点权重过大(如某点订单量1000,其余点不足100),导致热力图仅显示该点;

  • 解决方案:对权重进行归一化(如缩放到0-1),公式:

4. 交互性差:未添加辅助功能

  • 问题:热力图无法缩放、无信息弹窗;

  • 解决方案:

    • Python Folium:添加缩放控件、点击弹窗(显示区域名称/密度值);

    • 地图API:添加比例尺、鹰眼控件,支持鼠标滚轮缩放。

七、总结:从坐标到决策的价值闭环

经纬度热力图的核心价值,不在于“生成一张好看的图”,而在于“将离散的空间数据转化为可落地的决策依据”。无论是Python的定制化开发、Tableau的快速可视化,还是地图API的在线嵌入,选择方法的核心是匹配场景需求——技术人员追求灵活性,业务人员追求效率,产品人员追求交互性。

从核密度估计的公式推导,到实战中的参数调优,经纬度热力图的生成过程是“数据→模型→可视化→决策”的完整闭环。掌握这些方法,能让空间数据从“冰冷的坐标数字”变为“直观的业务洞察”,真正发挥地理数据的价值。

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

数据分析师资讯
更多

OK
客服在线
立即咨询
客服在线
立即咨询