水位线是随传感器数据实时变化的动态几何体,通过访问器属性实现数据驱动、按需加载与LOD联动。

水位线在三维管网可视化中不是静态贴图,而是随传感器数据实时变化的动态几何体。要实现“按需加载的水位线”,关键不在于单独渲染一条线,而在于把水位建模为可响应数据更新、可随视角流式加载的轻量级 3D 实体——访问器属性(Accessor Properties)正是串联数据驱动与渲染调度的核心桥梁。
用访问器封装水位状态,解耦数据与渲染
访问器属性(如 Cesium 中的 Property 类型或自定义 getter/setter)让水位高度、颜色、是否可见等参数具备“延迟求值”和“变更通知”能力。例如:
- 定义
waterLevelHeight为一个SampledProperty,支持从时间序列传感器数据中插值获取任意时刻的高度值 - 将
isVisible设为计算属性:当管道不在当前视锥内、或 LOD 级别过低时自动返回false,触发剔除逻辑 - 水位材质透明度可绑定到
fillRatio访问器,该值由当前水深 / 管道内径动态计算,无需每帧重设材质
水位几何体按需生成,而非预存全部实例
真正实现“按需”,意味着水位体(如圆柱内嵌体或 extruded polygon)只在管道进入可视范围且满足 LOD 条件时才构建:
- 在
addVerticalPipe或addHorizontalPipe方法中,不立即创建水位实体,而是注册一个“水位准备回调”,由场景管理器在需要时调用 - 利用 3D Tiles 的 tileset 遍历机制,在
tileVisible事件中检查该 tile 内管道 ID,批量触发对应水位体的初始化 - 水位体几何数据(顶点、索引)通过访问器动态生成:例如,
getWaterGeometry()只在首次渲染前调用,且结果可缓存复用
跨层级联动:水位访问器驱动 LOD 与资源置换
水位不只是视觉元素,它本身是资源调度信号源:
- 当
waterLevelHeight发生突变(如暴雨告警),触发高优先级加载:提前请求上游管段的精细水位模型,跳过低精度过渡阶段 - 水位体的
isAnimating访问器为true时,禁用纹理 Mipmap 降级,确保水面反光细节不模糊 - 内存紧张时,访问器可返回“简化的水位占位符”(如单色带状面片),而非销毁整个对象,保持 UI 连贯性
本质上,水位线不是画出来的,而是由一组协同工作的访问器“生长”出来的——它们把原始数据、空间状态、性能约束统一映射为可执行的渲染指令。不复杂但容易忽略。










