Коридоры в геопространственной визуализации CesiumJS представляют собой вытянутые вдоль ломаной линии области фиксированной ширины, геометрически эквивалентные «ленточным» полигонам, построенным вокруг полилинии с учётом кривизны эллипсоида. В отличие от обычных линий, коридор обладает площадью, может заливаться материалом, участвовать в классификации поверхности и пересечении с 3D Tiles, что делает его инструментом моделирования транспортных маршрутов, инженерных трасс, коридоров движения и линейных зон влияния.
Коридор определяется как множество точек, находящихся на фиксированном расстоянии от центральной полилинии. Для каждой вершины пути строится локальная система координат на поверхности эллипсоида, затем вокруг сегментов формируются смещённые контуры. В местах поворота используются алгоритмы скругления, зависящие от типа угла:
В CesiumJS это управляется параметром cornerType,
который влияет как на визуальное качество, так и на стоимость генерации
геометрии.
Ключевым параметром остаётся ширина:
width: 200.0
Ширина интерпретируется в метрах и распределяется симметрично относительно центральной линии.
Высокоуровневое создание коридора реализуется через
Entity-модель, где коридор выступает как графический
компонент сущности:
const corridorEntity = viewer.entities.add({
corridor: {
positions: Cesium.Cartesian3.fromDegreesArray([
30.5, 50.4,
30.6, 50.45,
30.8, 50.5
]),
width: 300,
material: Cesium.Color.BLUE.withAlpha(0.5),
cornerType: Cesium.CornerType.ROUNDED
}
});
В этом подходе Cesium автоматически выполняет:
Entity-уровень удобен для динамических сцен, где важна частая модификация координат или визуальных свойств.
Для сценариев высокой производительности используется низкоуровневый
API через Primitive и GeometryInstance. В этом
случае геометрия создаётся один раз и отправляется в GPU без постоянного
пересчёта.
const corridorGeometry = new Cesium.CorridorGeometry({
positions: Cesium.Cartesian3.fromDegreesArray([
30.5, 50.4,
30.6, 50.45,
30.8, 50.5
]),
width: 300.0,
cornerType: Cesium.CornerType.MITERED
});
const instance = new Cesium.GeometryInstance({
geometry: corridorGeometry,
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
Cesium.Color.RED.withAlpha(0.7)
)
}
});
viewer.scene.primitives.add(
new Cesium.Primitive({
geometryInstances: instance,
appearance: new Cesium.PerInstanceColorAppearance({
translucent: true,
closed: true
})
})
);
Использование примитивов снижает накладные расходы JavaScript и повышает стабильность FPS при большом количестве коридоров.
Коридоры часто комбинируются с обводкой для усиления читаемости на
фоне terrain и 3D Tiles. Для этого используется
CorridorOutlineGeometry.
const outline = new Cesium.GeometryInstance({
geometry: new Cesium.CorridorOutlineGeometry({
positions: Cesium.Cartesian3.fromDegreesArray([...]),
width: 300
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
Cesium.Color.WHITE
)
}
});
Обводка создаёт линейный каркас, который помогает визуально отделить коридор от подложки при низкой контрастности материалов.
Коридоры поддерживают широкий набор материалов через систему
Material CesiumJS. В отличие от простого цвета, материал
может быть процедурным:
Пример анимированного материала:
material: new Cesium.PolylineGlowMaterialProperty({
glowPower: 0.2,
color: Cesium.Color.CYAN
})
Также часто используется ImageMaterialProperty для
наложения дорожной разметки или транспортных схем.
Коридоры часто применяются как линейные геозоны, где важно не только отображение, но и пространственная логика: определение нахождения объектов внутри зоны влияния.
В таких сценариях коридор рассматривается как расширенная полоса вдоль маршрута, и используется совместно с:
Cesium.PolygonGeometryCesium.PolygonHierarchyCesium.Ellipsoid.containsТипичный подход — создание буферной зоны вдоль маршрута с фиксированной шириной, где проверяется принадлежность объектов.
В отличие от коридора, полигональные зоны позволяют моделировать сложные области с отверстиями и вложенными границами. Однако комбинация полигонов и коридоров часто используется для построения гибридных моделей:
polygon: {
hierarchy: Cesium.Cartesian3.fromDegreesArray([...]),
material: Cesium.Color.GREEN.withAlpha(0.3),
extrudedHeight: 0
}
Одна из ключевых возможностей коридоров — взаимодействие с рельефом и
3D-тайлами через classificationType. Это позволяет
«приклеивать» зону к terrain или зданиям.
corridor: {
positions: ...,
width: 200,
classificationType: Cesium.ClassificationType.TERRAIN
}
Доступные режимы:
В результате коридор может не просто отображаться поверх сцены, а модифицировать её визуальное представление, выделяя зоны дороги, коридоры коммуникаций или охранные полосы.
Хотя классический коридор является поверхностной геометрией, его можно комбинировать с высотными параметрами сцены:
height — базовая высота над эллипсоидомextrudedHeight — вертикальное вытягиваниеcorridor: {
positions: ...,
width: 250,
height: 0,
extrudedHeight: 1000,
material: Cesium.Color.YELLOW.withAlpha(0.4)
}
Такой подход позволяет моделировать объемные коридоры воздушного движения, трубопроводов или ограниченных пространств.
Качество коридора зависит от параметра granularity,
который определяет шаг разбиения линии на сегменты:
granularity: Cesium.Math.RADIANS_PER_DEGREE * 0.1
При работе на глобальных сценах важно учитывать, что слишком грубая дискретизация приводит к визуальному «ломанию» коридора на поворотах.
Сложные маршруты с частыми изменениями направления требуют корректной обработки углов. Cesium реализует три базовых режима:
Rounded-режим требует больше вычислений, но обеспечивает визуально корректные переходы на больших масштабах карты.
При большом количестве коридоров критическими становятся:
Практические оптимизации:
Primitive для статических коридоровgranularityGeometryInstancedepthFailMaterial, если не требуетсяВ сценах с тысячами коридоров Entity-подход становится узким местом из-за постоянной пересборки геометрии.
Коридоры активно используются как overlay-слои поверх городских моделей. При включённой классификации они могут:
Взаимодействие происходит на уровне stencil buffer и depth testing, где коридор влияет не только на собственную отрисовку, но и на видимость других объектов сцены.
Поскольку Cesium работает на эллипсоиде WGS84, коридоры подчиняются геодезической геометрии:
Это приводит к тому, что коридор на глобальной карте может визуально изгибаться даже при «прямом» наборе координат в градусах.
Коридоры часто применяются для:
В таких задачах они выступают как базовая геометрия для последующего анализа пересечений, агрегации статистики и построения пространственных ограничений.
Коридоры могут обновляться в реальном времени при изменении координат источников данных:
При Entity-подходе обновление координат приводит к автоматическому пересчёту геометрии, тогда как Primitive требует пересоздания экземпляра, но даёт больший контроль над производительностью.
На глобальных масштабах визуальная стабильность коридоров зависит от:
При низкой высоте камеры увеличивается детализация изгибов, при высокой — происходит агрегация сегментов, что снижает визуальную сложность сцены.