Label в CesiumJS представляет собой один из ключевых механизмов визуализации текстовой информации в 3D-сцене. В отличие от HTML-оверлеев, текстовые метки интегрированы в систему рендеринга WebGL и учитывают глубину сцены, масштабирование, положение камеры и особенности освещения. Label используется как в высокоуровневом API Entities, так и в низкоуровневых коллекциях LabelCollection, обеспечивая гибкость между удобством разработки и производительностью.
Текстовая метка в CesiumJS не является DOM-элементом. Она представляет собой спрайт, который рендерится в экранном пространстве после проекции 3D-координаты на 2D-плоскость.
Основные особенности:
Label тесно связан с камерой сцены и пересчитывается при каждом кадре рендеринга.
Наиболее распространённый способ работы с текстовыми метками —
использование Entity и свойства label.
const entity = viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(37.6173, 55.7558),
label: {
text: "Москва",
font: "16px sans-serif",
fillColor: Cesium.Color.WHITE,
outlineColor: Cesium.Color.BLACK,
outlineWidth: 3,
style: Cesium.LabelStyle.FILL_AND_OUTLINE
}
});
Entity API автоматически управляет жизненным циклом метки и её обновлением при изменении позиции или свойств.
text Основной текст метки. Поддерживает динамические выражения через CallbackProperty.
font CSS-подобное описание шрифта:
font: "bold 14px Arial"
fillColor Цвет заливки текста.
outlineColor и outlineWidth Контур повышает читаемость на сложном фоне.
style Возможные режимы отображения:
Позволяет смещать текст в экранных пикселях относительно точки привязки.
pixelOffset: new Cesium.Cartesian2(10, -20)
Используется для предотвращения наложения текста на маркеры или другие метки.
Смещение в координатах камеры:
eyeOffset: new Cesium.Cartesian3(0, 0, -10)
Позволяет визуально “приблизить” или “отдалить” метку относительно точки.
Определяет поведение метки относительно поверхности:
heightReference: Cesium.HeightReference.CLAMP_TO_GROUND
Позволяет ограничить отображение по расстоянию до камеры.
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 5000)
Метки часто скрываются на больших расстояниях для оптимизации сцены.
Автоматическое масштабирование:
scaleByDistance: new Cesium.NearFarScalar(1000, 1.0, 5000, 0.2)
Чем дальше объект, тем меньше размер текста.
Контроль прозрачности:
translucencyByDistance: new Cesium.NearFarScalar(2000, 1.0, 6000, 0.0)
Используется для плавного исчезновения меток.
Для высокопроизводительных сцен применяется LabelCollection.
const labels = viewer.scene.primitives.add(new Cesium.LabelCollection());
labels.add({
position: Cesium.Cartesian3.fromDegrees(10, 10),
text: "LabelCollection метка",
font: "20px sans-serif",
fillColor: Cesium.Color.YELLOW
});
CesiumJS поддерживает расширенные визуальные параметры.
backgroundColor: Cesium.Color.BLACK.withAlpha(0.7),
backgroundPadding: new Cesium.Cartesian2(6, 4)
Создаёт подложку под текстом для улучшения читаемости.
Определяют точку привязки текста:
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM
Варианты:
Label является одним из наиболее часто используемых элементов визуализации, поэтому требует внимательного подхода к оптимизации.
Использование LabelCollection вместо Entity при большом количестве объектов:
viewer.entities.removeAll();
и переход к:
new Cesium.LabelCollection()
Минимизация динамических свойств:
text: "Статический текст"
вместо:
text: new Cesium.CallbackProperty(...)
Label часто используется совместно с Billboard:
viewer.entities.add({
position: Cesium.Cartesian3.fromDegrees(30, 50),
billboard: {
image: "marker.png"
},
label: {
text: "Объект"
}
});
Такой подход формирует классическую схему “иконка + подпись”.
Label участвует в системе сортировки прозрачных объектов.
Особенности:
disableDepthTestDistance: Number.POSITIVE_INFINITY
Позволяет метке отображаться поверх геометрии.
Label поддерживает реактивные свойства через CallbackProperty:
label: {
text: new Cesium.CallbackProperty(function () {
return "Время: " + new Date().toLocaleTimeString();
}, false)
}
Такие метки обновляются каждый кадр и подходят для мониторинга данных.
Cesium Label поддерживает ограниченное форматирование:
\ntext: "Первая строка\nВторая строка"