CZML (Cesium Language) представляет собой JSON-подобный формат описания временных и пространственных сцен, используемый в экосистеме CesiumJS для потоковой передачи и декларативного описания 3D-данных.
CZML-документ представляет собой массив объектов, называемых пакетами (packets). Каждый пакет описывает отдельный объект сцены или его состояние во времени.
Базовая форма:
[
{
"id": "document",
"version": "1.0"
},
{
"id": "entity-1",
"name": "Объект"
}
]
Первый пакет с id: "document" задаёт метаинформацию.
Остальные пакеты описывают графические сущности.
Каждый объект в CZML идентифицируется через id. Если
несколько пакетов имеют одинаковый id, они считаются
частями одного объекта и объединяются по принципу наследования и
переопределения свойств.
[
{
"id": "satellite",
"label": {
"text": "Спутник"
}
},
{
"id": "satellite",
"position": {
"cartesian": [0, 0, 7000000]
}
}
]
CZML не содержит логики или процедурного кода. Все состояния задаются декларативно:
Обновление сцены происходит через интерпретацию данных движком Cesium.
Ключевая особенность CZML — поддержка временных интервалов и динамических значений.
"position": {
"interval": "2026-01-01T00:00:00Z/2026-01-02T00:00:00Z",
"cartesian": [0, 0, 0]
}
Интервал задаётся в формате ISO 8601:
start/end
"position": {
"epoch": "2026-01-01T00:00:00Z",
"cartesian": [
0, 0, 0, 0,
60, 1000, 0,
120, 2000, 0
]
}
Здесь:
CZML поддерживает несколько типов координат:
"position": {
"cartesian": [1000, 2000, 3000]
}
Используется для локальных или глобальных 3D координат.
"position": {
"cartographicDegrees": [37.7749, -122.4194, 1000]
}
Формат:
[долгота, широта, высота]
Используется реже, описывает сферические координаты.
{
"id": "point-1",
"point": {
"pixelSize": 10,
"color": {
"rgba": [255, 0, 0, 255]
}
}
}
{
"id": "path",
"polyline": {
"positions": {
"cartographicDegrees": [
0, 0, 0,
10, 0, 0
]
},
"width": 2
}
}
{
"id": "polygon",
"polygon": {
"hierarchy": {
"cartographicDegrees": [
0, 0,
10, 0,
10, 10,
0, 10
]
},
"material": {
"solidColor": {
"color": {
"rgba": [0, 255, 0, 100]
}
}
}
}
}
CZML поддерживает параметрические материалы:
"color": {
"rgba": [0, 0, 255, 255]
}
"material": {
"image": {
"uri": "texture.png"
}
}
Контролируется альфа-каналом RGBA или отдельными свойствами transparency.
CZML позволяет задавать динамическое движение через набор координат во времени.
{
"id": "moving-object",
"position": {
"epoch": "2026-01-01T00:00:00Z",
"cartesian": [
0, 0, 0, 0,
60, 10000, 0, 0,
120, 20000, 0, 0
]
}
}
Объект интерполируется между точками автоматически.
CZML использует модель наследования через повторяющиеся
id.
[
{
"id": "vehicle",
"model": {
"gltf": "vehicle.gltf"
}
},
{
"id": "vehicle",
"position": {
"cartographicDegrees": [30, 60, 1000]
}
}
]
Данные объединяются в единую сущность.
Загрузка CZML осуществляется через CzmlDataSource.
import { CzmlDataSource, Viewer } from "cesium";
const viewer = new Viewer("cesiumContainer");
const dataSource = new CzmlDataSource();
viewer.dataSources.add(dataSource);
dataSource.load([
{
id: "document",
version: "1.0"
},
{
id: "point",
position: {
cartographicDegrees: [30, 60, 1000]
},
point: {
pixelSize: 10
}
}
]);
CZML может обновляться инкрементально:
delete{
"id": "point",
"delete": true
}
CZML может содержать свойства для управления камерой:
"viewFrom": {
"cartesian": [0, -10000, 5000]
}
Это задаёт относительное положение камеры.
CZML поддерживает glTF-модели:
{
"id": "aircraft",
"model": {
"gltf": "aircraft.gltf",
"scale": 1.0
}
}
Модель может быть привязана к динамической позиции.
Некоторые свойства поддерживают интерполяцию и зависимости от времени:
"availability": "2026-01-01T00:00:00Z/2026-01-02T00:00:00Z"
Если объект вне диапазона availability, он не отображается.
CZML строго использует ISO 8601:
Для сложных сцен применяются следующие подходы:
iddocument пакетаid без необходимостиCZML транслируется в сущности Entity API:
Это обеспечивает единый внутренний механизм визуализации.
CZML используется как:
Он позволяет отделить генерацию данных от рендеринга, что критично для масштабных геоинформационных систем.