Как создать орбиту спутника и анимировать ее с помощью модели SGP4?

#javascript #cesium #satellite

#javascript #cesiumjs #Спутники

Вопрос:

Я новичок в Cesium и коде Javascript. Мне нужно создать орбиту спутника (ESEO) вокруг земного шара. Спутник должен двигаться в соответствии с моделью SGP4. Как я могу создать это в Cesium sandcastle? У меня проблемы, потому что я не нахожу в Интернете никаких руководств или примеров, объясняющих, как это сделать. Прямо сейчас я расположил наземную станцию только там, где я хочу, на земном шаре.

 var viewer = new Cesium.Viewer ('cesiumContainer', {
    scene3DOnly: false,
    selectionIndication: false,
    baseLayerPicker: true
                                });

Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4ODY0ZjkwMy03YmZlLTRlNGEtYmNhOS0xMDBlZGVmNDRkZGMiLCJpZCI6OTE4MSwic2NvcGVzIjpbImFzciIsImdjIl0sImlhdCI6MTU1MzYxMjM5Mn0.aYYX1f1MQfg9zLFu0vnP3A56Neo4Y_N3G2O5tuTS0XM';

// Enable lighting based on sun/moon positions
viewer.scene.globe.enableLighting = true;

//Stazione di terra
var entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(12.04, 44.23),
  ellipse : {
    semiMinorAxis : 150000.0,
    semiMajorAxis : 150000.0,
    material : Cesium.Color.YELLOW.withAlpha(0.5)
  }
});
var ellipse = entity.ellipse;
ellipse.material = new Cesium.GridMaterialProperty({
  color : Cesium.Color.YELLOW,
  cellAlpha : 0.2,
  lineCount : new Cesium.Cartesian2(8, 8),
  lineThickness : new Cesium.Cartesian2(2.0, 2.0)
});


var GroundStation = viewer.entities.add({
    name : 'Ground Station',
    position : Cesium.Cartesian3.fromDegrees(12.07, 44.23),
    point : {
        pixelSize : 5,
        color : Cesium.Color.RED,
        outlineColor : Cesium.Color.WHITE,
        outlineWidth : 2
    },
    label : {
        text : 'Ground Station',
        font : '14pt monospace',
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        outlineWidth : 2,
        verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
        pixelOffset : new Cesium.Cartesian2(0, -9)
    }
});

  

Комментарии:

1. Маловероятно, что будет учебное пособие для чего-то столь специфичного. Но похоже, что в основном это математическая модель. Итак, должен быть какой-то алгоритм или вычисление. Компьютеры хороши в математике, и большинство языков программирования, включая JavaScript, имеют множество математических функций и операторов, которые вы можете использовать, вам просто нужно посмотреть их. Я бы сначала спланировал ваши вычисления на бумаге, а затем попытался бы выяснить, как вы заставите код выполнять каждое вычисление, шаг за шагом. Вряд ли кто-нибудь здесь вам поможет, пока вы хотя бы не попытаетесь запустить ее самостоятельно

2. Я уже создал математическую модель, но проблема сейчас в том, чтобы просто создать орбиту на cesium sandcastle. Я не знаю, как визуализировать пути и движения спутника на нем

3. Итак, вы хотите сделать ее графическое отображение, а не просто вычисления? Я не уверен, что это было ясно в вопросе. Вы изучили основы этого инструмента Cesium, чтобы понять, как создавать простые формы и т.д.?

4. Да, первая проблема заключается в создании общей орбиты с использованием таких параметров, как период, большая полуось, эксцентриситет… как сценарий STK. Я хотел бы отобразить путь и точку, которая представляет спутник, движущийся по нему. Как я уже говорил, я новичок в Cesium и Javascript, я пытаюсь учиться, используя руководства и примеры, но об этом я ничего не смог найти.

5. Я использовал эти руководства на странице cesium js: cesium.com/docs

Ответ №1:

Когда люди рисуют орбиты в Cesium, они обычно используют полилинии вместо объекта ellipse, который используете вы.

Ссылка на полилинию / коллекцию полилиний:https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html

Теперь, что касается SGP4, этот пропагатор принимает двухстрочный элемент NORAD. Итак, если у вас есть свои параметры орбиты, вы можете создать свой собственный TLE. Это должно быть довольно легко сделать во внешней программе на Python и записать ее в файл JSON, который можно прочитать в javascript, а затем передать распространителю. Для получения дополнительной информации о TLE в Википедии есть хорошее описание того, как это форматируется.

Информация об TLE:https://en.wikipedia.org/wiki/Two-line_element_set

Для фактической реализации SGP4 существует Satellite.js пакет, ссылка на github которого приведена ниже. Они способны правильно реализовать propagator, который принимает NORAD TLE и выдает информацию о траектории.

Satellite.js github:https://github.com/shashwatak/satellite-js

Я почти уверен, что вам нужно преобразовать TLE в разные параметры, которые вы передаете в модуль satellite-js, который его распространяет.

Когда вы делаете это, я настоятельно рекомендую создать рабочий поток для выполнения кода из-за больших накладных расходов. Вы не хотите, чтобы все ваши математические работы выполнялись вместе с графическим отображением Cesium.

Еще одно важное замечание: вам абсолютно не нужно использовать SGP4, если вы можете этого избежать. Вы должны создать свой собственный propagator, который соответствует потребностям вашего проекта. Определение орбиты может быть сложным, но это гораздо лучшая практика, чем использование пропагатора, предназначенного для отслеживания спутников NORAD.

Ответ №2:

Вы можете посмотреть на этот проект для демонстрации некоторых элементов, перечисленных в ответе aaastro.

jspredict

Вы также можете проверить эту замечательную статью и вспомогательный источник для получения дополнительных пояснений по TLE, SGP4, Cesium.

Космическая передача

Визуализация орбитального мусора с помощью цезия и спутника-js