经纬志
首页 / MapLibre / 使用示例

热力图

点太密时改用密度着色。热力图的半径是像素单位, 所以同一份数据在不同缩放下呈现的聚集范围会变化。

MapLibre GL JS 4.x · 更新 2026-10-27
源码与运行效果
运行效果

说明

800 个点围绕八个人口密集城市生成,每个点带一个 0–1 的权重。 热力颜色按 heatmap-density 插值, 从透明过渡到蓝、绿、黄、橙。

map.addLayer({
  id: 'density-heat',
  type: 'heatmap',
  source: 'density',
  paint: {
    'heatmap-weight': ['interpolate', ['linear'], ['get', 'v'], 0, 0.2, 1, 1],
    'heatmap-radius': 30,
    'heatmap-color': [
      'interpolate', ['linear'], ['heatmap-density'],
      0, 'rgba(31,95,208,0)',
      0.2, '#1f5fd0',
      0.45, '#17694a',
      0.7, '#a16207',
      1, '#c2410c'
    ]
  }
});
属性作用单位
heatmap-weight单点贡献强度0–1
heatmap-radius单个点的影响半径像素
heatmap-intensity整体浓度倍数倍
heatmap-opacity图层透明度0–1

半径是屏幕像素,不是米。放大后同样的点会显得更分散, 因此热力图适合看「相对聚集」,不适合量算面积。 需要按真实距离统计时,用六边形网格先聚合。

热力图不适合几十个点的稀疏数据。点太少时整幅图只有几团模糊色块, 看不出分布差异,这种数据用 circle 图层更清楚。