PolygonLayer
以坐标数组描述面,支持空洞、挤出与线框,是自定义面状渲染的底层图层。
核心参数
| 参数 | 默认 | 说明 |
|---|---|---|
data | [] | 每条记录对应一个面 |
getPolygon | — | 顶点数组,多环时嵌套 |
filled | true | 是否填充 |
stroked | false | 是否描边 |
extruded | false | 是否挤出为柱体 |
wireframe | false | 挤出后只显示边线 |
getFillColor | [0, 0, 0, 255] | 填充色 |
getLineColor | [0, 0, 0, 255] | 边界色 |
getLineWidth | 1 | 边界宽度 |
lineWidthUnits | 'meters' | 建议用 'pixels' |
getElevation | 1000 | 挤出高度,米 |
elevationScale | 1 | 高度倍率 |
_normalize | false | 自动修正绕序与重复点 |
_windingOrder | 'CW' | 指定外环方向,配合 _normalize |
顶点结构
简单面用坐标数组的数组:
[[116.3, 39.9], [116.5, 39.9], [116.5, 40.1]]。
带空洞的面再套一层,第一个环是外环,其余环是洞:
getPolygon: function (d) {
return [
d.outer, // 外环
d.hole // 内环(洞)
];
}
圆角半径、坐标精度不会自动处理,顶点密度由数据决定。 一个只有三个点的面,放大后会看到明显的直边。
示例
var layer = new deck.PolygonLayer({
id: 'blocks',
data: blocks,
getPolygon: function (d) { return d.ring; },
filled: true,
stroked: true,
extruded: true,
getFillColor: function (d) {
return [60, 120 + d.floors * 4, 220, 200];
},
getLineColor: [220, 235, 255, 180],
getLineWidth: 1,
lineWidthUnits: 'pixels',
lineWidthMinPixels: 1,
getElevation: function (d) { return d.floors * 12; },
elevationScale: 1,
material: { ambient: 0.5, diffuse: 0.6, shininess: 16 },
pickable: true
});
绕序与三角化
面在 GPU 里要拆成三角形。拆分依赖顶点顺序判断内外,
外环逆时针、内环顺时针是通用约定。数据来源复杂时,
直接开 _normalize: true,让图层先统一绕序,
代价是启动时多一遍顶点处理。
非简单多边形(自相交、共线点过多)会让三角化失败, 表现为整块面缺失。预处理阶段用几何库修复, 比在前端猜参数更可靠。
边界与挤出
extruded: true 时,stroked 只沿顶面边界绘制,
侧面没有描边。需要完整的体块轮廓,用
wireframe: true,它会画出顶面、底面与侧棱。
挤出高度叠加在坐标第三位上:如果顶点本身带高程,
最终高度是两者之和,容易得到意外的尖塔。数据带高程时
把 getElevation 设为 0,只靠坐标第三位。
面数据优先用 GeoJsonLayer。PolygonLayer
只接受顶点数组,属性读取、点线面混排都要自己拆。
只有在数据结构特殊、或需要精确控制顶点时才直接用它。
经纬志(2026)。《PolygonLayer》。https://www.jingweizhi.com/deckgl/api/polygon-layer.html(访问日期 2026-11-03)。