经纬志
首页 / deck.gl / API 文档

ColumnLayer

先看结论

在每个坐标上立一根柱体,用高度表达数值,适合站点排名与三维柱状图。

最后验证 2026-11-03 · deck.gl 9.0 · 更新 2026-10-27 · 引用本文
new deck.ColumnLayer(props)

核心参数

参数默认说明
data[]每条数据一根柱体
getPosition—柱体中心坐标
radius1柱体半径,米
radiusUnits'meters'改为 'pixels' 可保持视觉大小
diskResolution20底面边数,决定圆柱的圆滑程度
getElevation1000柱高,米;通常返回 0 到 1 再乘倍率
elevationScale1高度倍率,最常用的动画参数
getFillColor[0, 0, 0, 255]柱体颜色
coverage1半径占比,小于 1 时柱体变细留缝
angle0绕轴旋转,度
extrudedtrue关闭后退化为平面圆盘,可用于展示位置
material内置环境光、漫反射、高光,控制侧面明暗
pickablefalse是否参与拾取

示例

var layer = new deck.ColumnLayer({
  id: 'columns',
  data: cells,
  diskResolution: 18,
  radius: 260,
  getPosition: function (d) { return [d.lng, d.lat]; },
  getElevation: function (d) { return d.value / 100; },
  elevationScale: 1400,
  coverage: 0.82,
  getFillColor: function (d) {
    return [70 + d.value * 1.2, 120, 230 - d.value, 220];
  },
  extruded: true,
  material: { ambient: 0.45, diffuse: 0.65, shininess: 24 },
  pickable: true,
  autoHighlight: true
});

高度映射

getElevation 的单位是米,直接返回真实高度最直观, 但换一份数据就要重调 elevationScale。 更稳的写法是把值归一化到 0–1,再用倍率控制整体高度: getElevation: d => d.value / max。

柱体高度小于 1 米时几乎看不见,低值会被系统性地隐藏。 需要表达差异同时保证可见性,可以给高度加一个基础值, 或把极小值映射到一个最小高度。

半径与密度

radius 是地面米数,缩放层级变化时屏幕尺寸跟着变。 站点密集时,半径过大会互相穿插,观感混乱;半径过小则柱体 细如针尖。coverage 的调节范围是 0.5–0.95, 配合半径可以把柱体调成不接触的阵列。

柱体密集但高度差异大时,添加 coverage 缝隙 比降低 diskResolution 更有效——后者只减少边数, 不解决遮挡。

光照

挤出体的质感来自 material。ambient 太低时背光面接近全黑,diffuse 太高时整根柱子发白。 深色背景上一般用 0.4–0.6 的环境光配 0.6–0.8 的漫反射。 柱体高度很大时,shininess 保持低位,避免出现刺眼的高光带。

几百根柱体用 ColumnLayer,上千根改用网格。 柱体适合表达个体,数量上去后遮挡严重、视觉噪音大, 这时 GridLayer 或 HexagonLayer 的挤出模式更合适。

引用本文

经纬志(2026)。《ColumnLayer》。https://www.jingweizhi.com/deckgl/api/column-layer.html(访问日期 2026-11-03)。