2

我已经解析了星历数据,以便获得在我当前位置上方可见的卫星的 ECEF(或纬度/经度)位置。我很想在我的 C# 程序的天空图中显示这些位置。
我在我的 GUI 中添加了一个图片框,并尝试缩放要显示的 x/y 值,但我不相信正在显示的位置与我当前的位置相关。
有没有人有关于如何做到这一点的任何示例或示例代码?
我在 C# winform 中执行此操作。

private const double CENTER = 110;    //center of drawing (pixels)
private double SCALE_FACTOR = 89.0 / 90.0;  //pixels from 90deg to 0 on drawing
.
.
.
private void drawSatellitePos(int svPrn, double elevation, double azimuth)  //radians
{
    double r = 90.0 - ConvertRadiansToDeg(elevation);
    double theta = 90.0 - ConvertRadiansToDeg(azimuth);
    theta = ConvertDegToRadians(theta);             

    double xLocation = CENTER + SCALE_FACTOR * r * Math.Cos(theta);
    double yLocation = CENTER + SCALE_FACTOR * r * Math.Sin(theta);

    Console.WriteLine("{0}:  x: {1}   Y: {2}", svPrn, xLocation, yLocation);

    Point point = new Point((int)xLocation, (int)yLocation);
}
4

1 回答 1

3

celestrak.com 的 TS Kelso 有一系列关于卫星跟踪和轨道坐标系的优秀文章。 本文介绍如何将卫星位置转换为特定地点(地心)坐标。(您可能需要将您的星历表从 ECEF 坐标(纬度/经度,随地球旋转)转换为 ECI(惯性坐标,相对于恒星固定)才能使用 Kelso 公式。

基本思想是在 ECI 坐标中计算给定时刻的卫星和观察者位置,然后在该时刻为特定于站点的坐标系定义“东”、“北”和“上”基向量(占地球的扁率),然后将卫星位置转换为从观测点看到的视角(方位角和仰角,或赤经和赤纬)。

于 2011-08-25T17:03:22.057 回答