首页 / OpenLayers / API 文档
WebGLPoints
先看结论
GPU 点图层。十万级以上的点用 Canvas 矢量图层会卡在重绘上, 这一层把点位写进缓冲区,用一次绘制调用画完。
new ol.layer.WebGLPoints({ source, style, ... })
构造参数
| 参数 | 默认 | 说明 |
|---|---|---|
source | — | 矢量数据源,要素的几何会被当作点位读取 |
style | — | 扁平样式对象,键名见下表 |
disableHitDetection | false | 关闭拾取;关闭后 forEachFeatureAtPixel 不再命中该层 |
className | 'ol-layer' | 容器 DOM 的类名 |
opacity / visible / zIndex | — | 与其他图层一致 |
常用样式键
| 键 | 说明 |
|---|---|
circle-radius | 点位半径,像素 |
circle-fill-color | 填充色,支持 rgba() |
circle-opacity | 填充透明度,0 到 1 |
circle-stroke-width | 描边宽度 |
circle-stroke-color | 描边颜色 |
circle-displacement | 像素偏移,[x, y] |
值可以是常量,也可以是表达式数组:['get', 'level'] 取属性,
['*', ['get', 'level'], 2] 做运算,['match', ...] 做分支。
示例
var layer = new ol.layer.WebGLPoints({
source: new ol.source.Vector({ features: points }),
style: {
'circle-radius': ['*', ['get', 'magnitude'], 1.6],
'circle-fill-color': [
'match',
['get', 'level'],
'high', 'rgba(214, 65, 65, 0.75)',
'mid', 'rgba(233, 160, 46, 0.7)',
'rgba(64, 132, 214, 0.65)'
],
'circle-stroke-width': 1,
'circle-stroke-color': 'rgba(255, 255, 255, 0.8)'
},
disableHitDetection: false,
opacity: 0.95
});
能做什么,不能做什么
支持圆点以及与圆点等价的简单图形,支持按属性设置大小、颜色与透明度。 不支持逐要素的文字标注、图片图标与复杂路径样式。 需要标注时,常见做法是同时加一个矢量图层只放少量关键点, 其余海量点交给 WebGL 层。
与 Heatmap 的分工
ol.layer.Heatmap 把点密度渲染成模糊色块,丢掉了单个点的位置感;
WebGLPoints 保留每个点的轮廓,适合需要辨认具体位置的场景。
两者都依赖 WebGL,回退方案是降低数据量而不是换渲染器。
表达式在着色器里逐顶点执行。['get', 'attr'] 读取的是要素属性缓冲区,
属性名必须与数据里完全一致,写成不存在的键不会报错,只会得到 0,
表现为所有点尺寸一致或颜色全黑。
经纬志(2026)。《WebGLPoints》。https://www.jingweizhi.com/openlayers/api/webgl-points-layer.html(访问日期 2026-11-03)。