Я начну с упоминания о том, что Cesium часто использует название ICRF как синоним или замену ECI, поэтому, если вы ищете документацию, вам больше повезет с поиском ICRF.
В CZML Sandcastle Demo показаны некоторые спутники, вращающиеся вокруг Земли, траектории которых показаны в инерциальной системе координат. . Это сделано в файле CZML делать две вещи:
- Установите значение
"referenceFrame":"INERTIAL"
в разделе position
- Все фактические значения
position
сами должны быть выражены в инерциальном, а не в фиксированном кадре.
Вы можете сказать, что путь находится в инерции, потому что это эллипс. Если бы его показывали в фиксированном режиме Земли, он выглядел бы как спираль, безумно закручивающаяся вокруг Земли. С течением времени эллипс орбиты, конечно, должен оставаться в инерциальной системе отсчета со звездами, не оставаясь фиксированным над какой-либо одной сушей на Земле.
Однако мне нужно показать их также в системе координат ECI, и для этого я должен заставить Землю вращаться.
Это две отдельные проблемы. В цезии неподвижная система отсчета Земли уже вращается (внутренне) по отношению к системе координат ICRF. Но камера по умолчанию остается в фиксированном положении Земли (ECF). Таким образом, пользователь видит, что Земля кажется неподвижной, а звезды и орбиты спутников вращаются вокруг Земли. На самом деле это правильный способ просмотра системы, как если бы камера была просто прикреплена к очень высокому шесту, прикрепленному к Земле, и движется по разным орбитам.
Чтобы Земля визуально вращалась на экране с течением времени, вы должны обновить положение камеры, чтобы она оставалась неподвижной в кадре ICRF, в отличие от фиксированного кадра по умолчанию.
В демонстрации Camera Sandcastle есть живой пример этого. Щелкните раскрывающийся список и выберите View in ICRF
из списка. Код для этого начинается со строки 119 в окне живого редактирования слева:
function icrf(scene, time) {
if (scene.mode !== Cesium.SceneMode.SCENE3D) {
return;
}
var icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);
if (Cesium.defined(icrfToFixed)) {
var camera = viewer.camera;
var offset = Cesium.Cartesian3.clone(camera.position);
var transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);
camera.lookAtTransform(transform, offset);
}
}
viewer.scene.postUpdate.addEventListener(icrf);
Этот код просто обновляет положение камеры с течением времени, так что камера кажется неподвижной в кадре ICRF со звездами и орбитами спутников, а сама Земля вращается.
person
emackey
schedule
04.06.2018
webgl-earth
. Мой ответ ниже относится к основному Цезию, а не к webgl-земле. Я думаю, что webgl-earth удаляет или скрывает некоторые функции Cesium, которые необходимы для спутников и ECI. - person emackey   schedule 04.06.2018