CZML - это основанный на JSON формат для описания изменяемых в течении времени графических сцен. Придуман, главным образом, для использования в браузерах выполняющий библиотеку Cesium.
Структура. Состоит из неких "пакетов" (Packets), каждый их которых определяет объект на сцене. На верхнем уровне описывается массив этих пакетов:
[
// packet one
{
"id": "SomeId1",
// ...
},
// packet two
{
"id": "SomeId2",
// ...
}
]
Возможно также описывать пакеты, таким образом, чтобы можно было загружать объекты сцены в потоковом режиме, в этом случае пакеты объектов могут описываться постепенно, в разных частях данных. Это реализуется с помощью технологии "Server-sent events" ( https://html.spec.whatwg.org/multipage/server-sent-events.html ).
Интервалы. Значения св-в объектов можно описывать через интервалы. При этом указывается время, в течении которого св-во имеет указанное значение, например:
{
"id": "myObject",
"someProperty": [
{
"interval": "2012-04-30T12:00:00Z/13:00:00Z",
"number": 5
},
{
"interval": "2012-04-30T13:00:00Z/14:00:00Z",
"number": 6
},
]
}
Также возможно описывать последовательное изменение значений (допускается разные алгоритмы последовательного изменения, по-умолчанию это - "линейная интерполяция). Например, для сложных значений (Composite Values) типа координат, описание последовательного изменения будет выглядеть следующим образом:
{
// ...
"someInterpolatableProperty": {
"cartesian": [
"2012-04-30T12:00Z", 1.0, 2.0, 3.0,
"2012-04-30T12:01Z", 4.0, 5.0, 6.0,
"2012-04-30T12:02Z", 7.0, 8.0, 9.0
]
}
}
Здесь на каждом тике будут вычисляться промежуточные значения. Например, в 12:00:30 координаты будут [2.5, 3.5, 4.5]
Без описания изменений во времени, для сложных (композитных) значений, их всё равно необходимо их описывать в отдельном наборе полей:
{
"id": "myObject",
"someComplexProperty": {
"cartesian": [1.0, 2.0, 3.0]
}
}
Особенности формата, связь с другими форматами
- Файлы gltf могут быть частями формата и задаётся ключами model, gltf, пример:
"model": {
"gltf": "models/CesiumMilkTruck/CesiumMilkTruck.glb"
}
Свойства объектов
- id - уникальный, в пределах сцены, идентификатор
- model - задаёт модель в формате gltf/glb