Wall в CesiumJS представляет собой вертикальную поверхность, построенную по набору географических координат. Геометрически это ломаная линия, между точками которой формируются «стены», вытянутые по вертикали от заданной нижней до верхней высоты.
Основной способ создания — использование Entity с
графикой wall:
const viewer = new Cesium.Viewer("cesiumContainer");
const wallEntity = viewer.entities.add({
wall: {
positions: Cesium.Cartesian3.fromDegreesArray([
30.5, 50.5,
30.6, 50.5,
30.6, 50.6,
30.5, 50.6
]),
minimumHeights: [0, 0, 0, 0],
maximumHeights: [500, 500, 500, 500],
material: Cesium.Color.BLUE.withAlpha(0.5)
}
});
Ключевые параметры:
positions — последовательность координатminimumHeights — нижняя граница стеныmaximumHeights — верхняя границаmaterial — материал поверхностиWall строится как набор четырёхугольников между соседними точками:
Внутренне Cesium преобразует геодезические координаты в Cartesian3 и строит сегменты в мировом пространстве, учитывая форму эллипсоида Земли.
Если высота одинакова для всех точек:
wall: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
maximumHeights: 1000,
minimumHeights: 0
}
Cesium автоматически применяет скаляр ко всем вершинам.
При использовании массивов:
maximumHeights: [100, 200, 300, 400]
minimumHeights: [0, 0, 0, 0]
Каждая точка получает собственную высотную привязку. Это позволяет моделировать:
Wall поддерживает любые материалы Cesium Material System.
material: Cesium.Color.RED.withAlpha(0.4)
material: new Cesium.ImageMaterialProperty({
image: "texture.png",
repeat: new Cesium.Cartesian2(2, 1)
})
material: new Cesium.StripeMaterialProperty({
evenColor: Cesium.Color.WHITE,
oddColor: Cesium.Color.BLUE,
repeat: 10,
offset: 0,
orientation: Cesium.StripeOrientation.VERTICAL
})
Анимация достигается через изменение offset во
времени.
Cesium строит стены на эллипсоиде WGS84, поэтому:
granularitywall: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
granularity: Cesium.Math.RADIANS_PER_DEGREE
}
Меньшее значение granularity увеличивает точность, но
снижает производительность.
Флаг perPositionHeight изменяет способ интерпретации
высот:
wall: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
perPositionHeight: true
}
Поведение:
false — высоты применяются как уровни над
эллипсоидомtrue — каждая точка использует собственную 3D
координатуЭтот режим критичен при интеграции с DEM-данными и 3D-рельефом.
Помимо Entity API существует WallGeometry:
const wallGeometry = new Cesium.WallGeometry({
positions: Cesium.Cartesian3.fromDegreesArray([...]),
maximumHeights: [100, 100, 100, 100],
minimumHeights: [0, 0, 0, 0]
});
const geometryInstance = new Cesium.GeometryInstance({
geometry: wallGeometry,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
Cesium.Color.YELLOW
)
}
});
const primitive = new Cesium.Primitive({
geometryInstances: geometryInstance,
appearance: new Cesium.PerInstanceColorAppearance()
});
viewer.scene.primitives.add(primitive);
Использование Primitive даёт:
Wall может зависеть от изменяемых данных через
CallbackProperty:
wall: {
positions: new Cesium.CallbackProperty(() => {
return Cesium.Cartesian3.fromDegreesArray([
30.5, 50.5,
30.6, 50.5,
30.6, 50.6,
30.5, 50.6
]);
}, false),
maximumHeights: 500,
minimumHeights: 0
}
Такой подход используется при:
Wall поддерживает классификацию объектов сцены через
classificationType:
wall: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
classificationType: Cesium.ClassificationType.BOTH
}
Варианты:
Это позволяет использовать стены как:
Ключевые факторы производительности:
Оптимизационные приёмы:
Wall используется для визуального выделения:
Wall не является объёмным объектом. Это:
При больших масштабах возможны артефакты z-fighting, устраняемые:
Wall часто используется вместе с:
Комбинация позволяет формировать:
Несмотря на это, Wall остаётся базовым инструментом для пространственной сегментации сцены в CesiumJS.