H3HexagonLayer
H3 六边形图层。每个数据项对应一个 H3 索引,图层把索引还原成六边形贴到球面上, 用于网格聚合与空间统计。
核心参数
| 参数 | 默认 | 说明 |
|---|---|---|
data | — | 数据数组,每项对应一个六边形 |
getHexagon | 必填 | 返回 H3 索引字符串,如 '8928308280fffff' |
getFillColor | [0, 0, 0, 255] | 填充色,可按属性计算 |
getElevation | 1000 | 挤出高度,米 |
extruded | false | 是否把六边形拉伸为柱体 |
wireframe | false | 挤出后只画边线 |
elevationScale | 1 | 高度统一倍率 |
coverage | 1 | 0 到 1,控制六边形的填充比例,小于 1 时相邻格之间留缝 |
highPrecision | false | true 时使用 H3 的精确边界,跨投影和五边形格子更准确 |
opacity / pickable | 1 / false | 透明度与拾取 |
示例
var hexes = new deck.H3HexagonLayer({
id: 'h3-density',
data: aggregated,
getHexagon: function (d) { return d.h3; },
getFillColor: function (d) {
var v = Math.min(d.count / 800, 1);
return [255 * v, 140 * (1 - v), 90, 190];
},
getElevation: function (d) { return d.count * 4; },
extruded: true,
elevationScale: 1,
coverage: 0.92,
pickable: true
});
依赖 h3-js
H3 索引的几何还原依赖 h3-js,它不在 deck.gl 主包里。
使用该图层前需要单独安装,版本与 deck.gl 9 匹配。
只用 h3-js 做聚合、由自己提供中心点坐标时,
改用 HexagonLayer 更省事。
coverage 的用途
coverage 为 1 时六边形彼此相接,视觉上像一块连续的蜂巢;
调到 0.7 左右会露出缝隙,能看清底图,也让高密度区域不至于糊成一片。
它不是缩放比例,而是每个格子向中心收缩的程度。
highPrecision 的代价
默认实现把六边形近似成规则多边形再投影,跨大范围时边缘会略有偏差;
highPrecision: true 用 H3 给出的真实边界点,
形状更准确,但顶点数增加,数据量大时帧率下降。
只在需要精确边界(如与行政区划比对)时打开。
v9 的不可变更新
deck.gl 9 的图层不可变,改 coverage 或数据都要新建实例。
用 clone 加 deckgl.setProps 完成更新:
var next = hexes.clone({
data: aggregatedV2,
coverage: 1
});
deckgl.setProps({ layers: [next] });
层级要统一。同一图层里混用不同分辨率的 H3 索引,六边形大小会不一致, 看起来像随机缩放。聚合时先固定分辨率,再按该层级的格子汇总。
经纬志(2026)。《H3HexagonLayer》。https://www.jingweizhi.com/deckgl/api/h3-hexagon-layer.html(访问日期 2026-11-03)。