Skip to content

GradientWallLayer 渐变立体墙图层 ​

GradientWallLayer 使用 Cesium WallGraphics 将标准线、面数据渲染为垂直立体墙,并通过运行时生成的 Canvas 纹理实现从墙底到墙顶的颜色与透明度渐变。它适用于区域边界、电子围栏、警戒区、能量罩边缘和分级防护带。

组件案例 ​

构造函数 ​

js
new MapLayers.GradientWallLayer(viewer, config)
参数类型默认值说明
colorstring | Cesium.Color'#35eaff'默认墙体颜色
heightnumber900未提供坐标顶高时使用的墙体高度,单位为米
baseHeightnumber0墙体底部的绝对高度,单位为米
opacitynumber1整体透明度,范围 0–1
gradientobject | nullnull自定义颜色渐变;0 表示墙底,1 表示墙顶
opacityStopsobject底部不透明、顶部透明使用统一颜色时的透明度断点
closedbooleanfalse是否自动闭合 LineString
outlinebooleanfalse是否显示墙体轮廓线
outlineColorstring | Cesium.Color'#bffcff'轮廓线颜色
idPrefixstring'bmap-viewer-gradient-wall'内部 Cesium Entity ID 前缀

构造参数可以被单条数据的同名 properties 字段覆盖,因此同一个图层中可以显示不同高度、颜色和渐变的墙体。

数据规范 ​

图层接受 BMapViewer 统一的 GeoJSON Feature 数组,支持以下几何类型:

  • LineString
  • MultiLineString
  • Polygon
  • MultiPolygon

Polygon 的每个环会分别生成闭合墙体;LineString 默认保持开放,可以通过 properties.closed 闭合。

js
const wallData = [
  {
    geometry: {
      type: 'Polygon',
      coordinates: [[
        [125.82, 44.14],
        [125.85, 44.14],
        [125.85, 44.16],
        [125.82, 44.16],
        [125.82, 44.14],
      ]],
    },
    properties: {
      id: 'warning-area',
      name: '警戒区域',
      color: '#35eaff',
      baseHeight: 20,
      height: 800,
    },
  },
]

高度优先级 ​

二维坐标 [经度, 纬度] 使用 baseHeight + height 作为顶高。三维坐标 [经度, 纬度, 高度] 的第三位表示该顶点的绝对顶高,可用于制作高度起伏的墙体:

js
{
  geometry: {
    type: 'LineString',
    coordinates: [
      [125.80, 44.13, 420],
      [125.81, 44.14, 680],
      [125.82, 44.15, 920],
    ],
  },
  properties: {
    id: 'variable-height-wall',
    baseHeight: 20,
  },
}

渐变配置 ​

默认情况下,color 配合 opacityStops 生成同色透明渐变。断点位置遵循业务高度方向:0 是墙底,1 是墙顶。

js
const layer = new MapLayers.GradientWallLayer(viewer, {
  color: '#35eaff',
  opacityStops: {
    0.0: 1.0,
    0.35: 0.7,
    0.7: 0.25,
    1.0: 0.0,
  },
})

需要多色渐变时传入 CSS 颜色字符串:

js
const layer = new MapLayers.GradientWallLayer(viewer, {
  gradient: {
    0.0: 'rgba(255, 70, 150, 0.95)',
    0.5: 'rgba(175, 90, 255, 0.55)',
    1.0: 'rgba(70, 150, 255, 0)',
  },
})

方法 ​

方法说明
setData(features)清除旧数据并加载标准线、面数据
setOptions(options)更新全局配置并使用现有数据重新渲染
addLayer(feature)追加一条墙体数据
removeLayer(entity)移除指定 Cesium Entity
removeLayerById(id)移除业务 ID 对应的全部墙体
getLayerById(id)获取业务 ID 对应的第一个墙体 Entity
getLayersById(id)获取业务 ID 对应的全部墙体 Entity
getLayerDataById(id)获取对应的原始 Feature 数据
show() / hide()显示或隐藏当前图层的全部墙体
clearLayer()清除当前图层创建的 Entity,保留原始数据
destroy()销毁图层并释放 Viewer 引用

地形深度检测 ​

图层不会擅自修改 Viewer 的全局场景设置。需要墙体与地形进行正确遮挡时,由应用按需开启:

js
viewer.scene.globe.depthTestAgainstTerrain = true

基于 Apache-2.0 许可发布