Corridor отображение

Визуализация коридоров в CesiumJS реализуется через примитив CorridorGraphics, предназначенный для построения вытянутых полос вдоль ломаной линии на поверхности Земли или в объёме сцены. Коридор представляет собой геометрический объект с постоянной шириной, проходящий через набор координат и формирующий поверхность с заданными параметрами высоты, скругления и материала.

Коридоры применяются для моделирования дорог, маршрутов движения, трубопроводов, границ зон влияния и любых линейно-протяжённых объектов, где важна ширина, а не только осевая линия.


Основная модель Corridor

Коридор определяется набором точек (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)
  }
});

Ключевые характеристики

  • positions — массив координат, задающих центральную линию
  • width — ширина коридора в метрах
  • material — материал поверхности
  • height / extrudedHeight — управление положением и объёмом
  • cornerType — тип обработки поворотов

Геометрическая интерпретация

Corridor строится как последовательность сегментов, вокруг которых вычисляется перпендикулярный вектор смещения. Каждый сегмент превращается в прямоугольную полосу, а стыки формируют соединения.

Важные особенности построения

  • ширина интерпретируется в метрах в системе локального тангенциального пространства
  • геометрия адаптируется к кривизне эллипсоида
  • сегменты могут иметь разную длину, но ширина остаётся постоянной
  • повороты требуют обработки углов соединения

Управление высотой

Corridor может существовать в нескольких режимах размещения по вертикали.

Поверхностный режим

corridor: {
  positions: Cesium.Cartesian3.fromDegreesArray([...]),
  width: 1000,
  clampToGround: true
}
  • объект «прилипает» к рельефу
  • используется для дорог и маршрутов
  • учитывает terrain provider

Фиксированная высота

corridor: {
  positions: Cesium.Cartesian3.fromDegreesArray([...]),
  width: 1000,
  height: 5000
}
  • вся геометрия смещена на заданную высоту
  • не зависит от рельефа

Экструзия (объёмный коридор)

corridor: {
  positions: Cesium.Cartesian3.fromDegreesArray([...]),
  width: 1000,
  extrudedHeight: 0,
  height: 2000
}
  • создаётся объёмная стенка между уровнями
  • формируется 3D-призматическая структура

CornerType и поведение изгибов

Параметр cornerType определяет, как обрабатываются углы в ломаной линии.

Доступные режимы

  • ROUNDED — скруглённые углы
  • MITERED — острые соединения
  • BEVELED — срезанные углы
corridor: {
  positions: Cesium.Cartesian3.fromDegreesArray([...]),
  width: 1500,
  cornerType: Cesium.CornerType.ROUNDED
}

Поведение

  • ROUNDED увеличивает количество вершин, но улучшает визуальную плавность
  • MITERED даёт геометрически точные углы, но может создавать артефакты при острых поворотах
  • BEVELED ограничивает длину выступов на стыках

Материалы Corridor

Corridor поддерживает любые материалы Cesium, включая цвета, изображения и процедурные шейдеры.

Цветовой материал

material: Cesium.Color.RED.withAlpha(0.7)

Текстурный материал

material: new Cesium.ImageMaterialProperty({
  image: 'road_texture.png',
  repeat: new Cesium.Cartesian2(10, 1)
})

Чекерные и процедурные эффекты

Используются для симуляции движения или выделения маршрутов.


Сравнение Corridor и PolylineVolume

Corridor часто путают с PolylineVolumeGeometry, однако их назначение различается.

Corridor

  • плоская или экструдированная полоса
  • ориентирована на поверхность
  • оптимизирована для 2.5D задач
  • поддерживает clampToGround

PolylineVolume

  • объём, протягиваемый вдоль линии
  • требует формы поперечного сечения
  • используется для труб, кабелей, тоннелей

Производительность

Corridor относится к высокоэффективным примитивам, однако сложность зависит от количества точек и режима скругления.

Факторы нагрузки

  • число узлов ломаной
  • использование ROUNDED cornerType
  • наличие текстур с анимацией
  • экструдированная геометрия

Оптимизационные подходы

  • сокращение количества промежуточных точек
  • использование MITERED вместо ROUNDED при допустимости
  • применение статических материалов вместо процедурных
  • группировка коридоров в один EntityCollection

Работа с динамическими данными

Corridor может обновляться в реальном времени через CallbackProperty.

corridor: {
  positions: new Cesium.CallbackProperty(() => {
    return Cesium.Cartesian3.fromDegreesArray(dynamicCoords);
  }, false),
  width: 1000
}

Особенности

  • пересчёт геометрии происходит при каждом кадре
  • возможно снижение производительности при частых обновлениях
  • предпочтительно ограничивать частоту изменения координат

Привязка к рельефу

При использовании clampToGround геометрия адаптируется к terrain provider.

Поведение

  • вершины проецируются на поверхность земли
  • учитываются цифровые модели высот
  • возможны искажения на резких перепадах рельефа

Визуальные сценарии применения

Дорожные сети

Corridor используется для отображения дорог с постоянной шириной, где осевая линия задаётся навигационными точками.

Зоны влияния

Полосы безопасности, коридоры полётов, санитарные зоны.

Маршруты движения

Визуализация логистики транспорта, судоходных и авиационных трасс.

Инженерные системы

Линейные инфраструктуры, отображаемые как плоские или объёмные полосы.


Особенности вычисления ширины

Ширина corridor интерпретируется в метрах, но фактическое отображение зависит от масштаба и кривизны поверхности Земли.

  • на экваторе масштаб ближе к линейному
  • в высоких широтах возможны визуальные искажения
  • ширина всегда симметрична относительно центральной линии

Использование нескольких коридоров

При сложных сценах применяются составные структуры:

  • параллельные corridor для полос движения
  • наложение полупрозрачных материалов
  • комбинирование с polyline для осевых линий
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
  }
});

Ограничения модели

  • отсутствует переменная ширина вдоль сегмента
  • сложные самопересечения могут давать артефакты
  • высокая плотность точек ухудшает производительность
  • экструзия увеличивает нагрузку на GPU

Поведение при пересечении с объектами

Corridor может взаимодействовать с классификацией сцен:

  • Cesium.ClassificationType.TERRAIN
  • Cesium.ClassificationType.CESIUM_3D_TILE
  • Cesium.ClassificationType.BOTH

Это позволяет использовать коридоры как маски или области выделения поверх 3D Tiles.


Практическая структура данных

Типичная структура коридора в Entity API:

{
  corridor: {
    positions: Cartesian3[],
    width: Number,
    height: Number,
    extrudedHeight: Number,
    material: MaterialProperty,
    cornerType: CornerType,
    clampToGround: Boolean
  }
}

Поведение при масштабировании сцены

Corridor остаётся стабильным по ширине в мировых координатах, но визуальное восприятие зависит от:

  • расстояния камеры
  • уровня детализации terrain
  • включённого anti-aliasing
  • режима depth testing

Интеграция с анимацией

Коридоры часто используются как база для анимации движения:

  • изменение цвета вдоль маршрута
  • «заполнение» маршрута прогрессом
  • пульсирующие эффекты через material
material: new Cesium.ColorMaterialProperty(
  new Cesium.CallbackProperty(() => {
    return Cesium.Color.fromHsl(time % 1, 1.0, 0.5);
  }, false)
)

Закономерности визуальной интерпретации

Corridor в CesiumJS фактически является 2D-полигоном, экструдированным вдоль геодезической линии, где каждая точка формирует локальную систему координат, а итоговая геометрия собирается как непрерывная полоса с учётом кривизны поверхности Земли и заданных параметров соединений.