Как создать орбиту спутника и анимировать ее с помощью модели SGP4? - PullRequest
0 голосов
/ 06 апреля 2019

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

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 Ответ

0 голосов
/ 26 июля 2019

Когда люди рисуют орбиты в Цезии, они обычно используют полилинии вместо используемой вами сущности эллипса.

Ссылка на коллекцию полилиний / полилиний: 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 которого связан ниже.Они способны правильно реализовать пропагатор, который принимает NORAD TLE и выдает информацию о траектории.

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

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

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

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

...