antv-l7/packages/site/docs/tutorial/heatmap/normal.zh.md

2.8 KiB

title order
经典热力图 0

热力图是地图可视化场景中十分常见的需求。在区域范围内数据具有的一定热度分级分布情况的聚合面状现象,常用于描述人群分布、密度和变化趋势等。

案例

实现

下面我们来介绍如何绘制一个经典热力图。

import { Scene, HeatmapLayer } from '@antv/l7';
import { GaodeMap } from '@antv/l7-maps';

const scene = new Scene({
  id: 'map',
  map: new GaodeMap({
    style: 'dark',
    center: [ 127.5671666579043, 7.445038892195569 ],
    zoom: 2.632456779444394
  })
});
scene.on('loaded', () => {
  fetch('https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json')
    .then(res => res.json())
    .then(data => {
      const layer = new HeatmapLayer({})
        .source(data)
        .shape('heatmap')
        .size('mag', [ 0, 1.0 ]) // weight映射通道
        .style({
          intensity: 2,
          radius: 20,
          rampColors: {
            colors: [
              '#FF4818',
              '#F7B74A',
              '#FFF598',
              '#91EABC',
              '#2EA9A1',
              '#206C7C'
            ].reverse(),
            positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
          }
        });
      scene.addLayer(layer);
    });
});

source

经典热力图只支持点数据作为数据源,数据格式支持 csvjsongeojson

const source = new Source([{
  lng: 120, lat: 30
},...], {
  parser: {
    type: 'json',
    x: 'lng',
    y: 'lat'
  }
})

shape

经典热力图的 shape 为常量 heatmap

size

我们需要将值映射到 [0, 1] 的值域空间。

  • field: 热力图权重字段
  • values: 数据映射区间 热力图显示 [0, 1] 效果最佳
layer.size('weight', [0, 1]);

color

热力图通过 style 的指定参数配置颜色。

style

  • intensity 全局热力权重,推荐权重范围 1 - 5
  • radius   热力半径,单位像素。
  • rampColors 色带参数。

rampColors

  • colors  颜色数组
  • positions 数据区间

配置值域映射颜色的色带,值域的范围为 [0 - 1], 对应的我们需要为每一个 position 位置设置一个颜色值。

⚠️ colors, positions 的长度要相同

layer.style({
  rampColors: {
    colors: ['#FF4818', '#F7B74A', '#FFF598', '#91EABC', '#2EA9A1', '#206C7C'],
    positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0],
  },
});