Cesium Earth: Показать спутники в системе координат ECI

Я использую Cesium Earth для разработки приложения для отслеживания спутников.

Теперь координаты спутника находятся в фиксированной системе Земли, и все работает нормально.

Однако мне нужно показать их также в системе координат ECI, и для этого я должен заставить Землю вращаться.

Как это сделать?


person Leeloo    schedule 04.06.2018    source источник
comment
Только что заметил ваш тег webgl-earth. Мой ответ ниже относится к основному Цезию, а не к webgl-земле. Я думаю, что webgl-earth удаляет или скрывает некоторые функции Cesium, которые необходимы для спутников и ECI.   -  person emackey    schedule 04.06.2018
comment
Я использую Цезий, снял бирку   -  person Leeloo    schedule 04.06.2018


Ответы (1)


Я начну с упоминания о том, что 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
comment
Отличный ответ! Ценить! - person Leeloo; 04.06.2018
comment
Функция icrf() устанавливает новый вид камеры, когда она включена. Если я включаю/отключаю с помощью флажка, он также меняет вид камеры. Это также противоречит viewer.flyTo(). Как я мог это решить? - person Leeloo; 12.07.2018