Визуализация коридоров в CesiumJS реализуется через примитив
CorridorGraphics, предназначенный для построения вытянутых
полос вдоль ломаной линии на поверхности Земли или в объёме сцены.
Коридор представляет собой геометрический объект с постоянной шириной,
проходящий через набор координат и формирующий поверхность с заданными
параметрами высоты, скругления и материала.
Коридоры применяются для моделирования дорог, маршрутов движения, трубопроводов, границ зон влияния и любых линейно-протяжённых объектов, где важна ширина, а не только осевая линия.
Коридор определяется набором точек (positions), шириной и дополнительными параметрами геометрии.
const entity = viewer.entities.add({
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([
30.5, 50.4,
30.6, 50.5,
30.7, 50.55
]),
width: 2000,
material: Cesium.Color.BLUE.withAlpha(0.6)
}
});
Corridor строится как последовательность сегментов, вокруг которых вычисляется перпендикулярный вектор смещения. Каждый сегмент превращается в прямоугольную полосу, а стыки формируют соединения.
Corridor может существовать в нескольких режимах размещения по вертикали.
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 1000,
clampToGround: true
}
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 1000,
height: 5000
}
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 1000,
extrudedHeight: 0,
height: 2000
}
Параметр cornerType определяет, как обрабатываются углы
в ломаной линии.
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 1500,
cornerType: Cesium.CornerType.ROUNDED
}
Corridor поддерживает любые материалы Cesium, включая цвета, изображения и процедурные шейдеры.
material: Cesium.Color.RED.withAlpha(0.7)
material: new Cesium.ImageMaterialProperty({
image: 'road_texture.png',
repeat: new Cesium.Cartesian2(10, 1)
})
Используются для симуляции движения или выделения маршрутов.
Corridor часто путают с PolylineVolumeGeometry, однако
их назначение различается.
Corridor относится к высокоэффективным примитивам, однако сложность зависит от количества точек и режима скругления.
Corridor может обновляться в реальном времени через
CallbackProperty.
corridor: {
positions: new Cesium.CallbackProperty(() => {
return Cesium.Cartesian3.fromDegreesArray(dynamicCoords);
}, false),
width: 1000
}
При использовании clampToGround геометрия адаптируется к
terrain provider.
Corridor используется для отображения дорог с постоянной шириной, где осевая линия задаётся навигационными точками.
Полосы безопасности, коридоры полётов, санитарные зоны.
Визуализация логистики транспорта, судоходных и авиационных трасс.
Линейные инфраструктуры, отображаемые как плоские или объёмные полосы.
Ширина corridor интерпретируется в метрах, но фактическое отображение зависит от масштаба и кривизны поверхности Земли.
При сложных сценах применяются составные структуры:
viewer.entities.add({
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 3000,
material: Cesium.Color.YELLOW.withAlpha(0.3)
}
});
viewer.entities.add({
polyline: {
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 2,
material: Cesium.Color.BLACK
}
});
Corridor может взаимодействовать с классификацией сцен:
Cesium.ClassificationType.TERRAINCesium.ClassificationType.CESIUM_3D_TILECesium.ClassificationType.BOTHЭто позволяет использовать коридоры как маски или области выделения поверх 3D Tiles.
Типичная структура коридора в Entity API:
{
corridor: {
positions: Cartesian3[],
width: Number,
height: Number,
extrudedHeight: Number,
material: MaterialProperty,
cornerType: CornerType,
clampToGround: Boolean
}
}
Corridor остаётся стабильным по ширине в мировых координатах, но визуальное восприятие зависит от:
Коридоры часто используются как база для анимации движения:
material: new Cesium.ColorMaterialProperty(
new Cesium.CallbackProperty(() => {
return Cesium.Color.fromHsl(time % 1, 1.0, 0.5);
}, false)
)
Corridor в CesiumJS фактически является 2D-полигоном, экструдированным вдоль геодезической линии, где каждая точка формирует локальную систему координат, а итоговая геометрия собирается как непрерывная полоса с учётом кривизны поверхности Земли и заданных параметров соединений.