ColumnLayer
在每个坐标上立一根柱体,用高度表达数值,适合站点排名与三维柱状图。
核心参数
| 参数 | 默认 | 说明 |
|---|---|---|
data | [] | 每条数据一根柱体 |
getPosition | — | 柱体中心坐标 |
radius | 1 | 柱体半径,米 |
radiusUnits | 'meters' | 改为 'pixels' 可保持视觉大小 |
diskResolution | 20 | 底面边数,决定圆柱的圆滑程度 |
getElevation | 1000 | 柱高,米;通常返回 0 到 1 再乘倍率 |
elevationScale | 1 | 高度倍率,最常用的动画参数 |
getFillColor | [0, 0, 0, 255] | 柱体颜色 |
coverage | 1 | 半径占比,小于 1 时柱体变细留缝 |
angle | 0 | 绕轴旋转,度 |
extruded | true | 关闭后退化为平面圆盘,可用于展示位置 |
material | 内置 | 环境光、漫反射、高光,控制侧面明暗 |
pickable | false | 是否参与拾取 |
示例
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)。