Отображение положения спутников GPS на небосводе

Я проанализировал данные эфемерид, чтобы получить ECEF (или широту/долготу) позиции спутников, видимых над моим текущим местоположением. Я хотел бы отобразить эти местоположения на графике неба в моей программе на C#.
Я добавил окно изображения в свой графический интерфейс и попытался масштабировать значения 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);
}

person Jason    schedule 25.08.2011    source источник
comment
Я также хотел бы иметь возможность сделать это на вращающемся 3D-глобусе, используя WPF и C#. Я надеюсь, что кто-нибудь знает библиотеку или пример кода для этого.   -  person sizzle    schedule 25.08.2011
comment
Если вы можете определить положение ECEF, то вы можете разместить его в Google Earth без особых проблем. Есть примеры того, как взаимодействовать с GE, и добавление точки на основе x, y, z не должно быть слишком сложным. Я использовал проект GNSS в качестве примера кода для анализа данных эфемерид, хотя я все еще пытаюсь проверить правильность данных.   -  person Jason    schedule 30.08.2011


Ответы (1)


Т.С. У Келсо из celestrak.com есть превосходная серия статей о спутниковом отслеживании и системах орбитальных координат. В этой статье объясняется, как преобразовывать спутниковые координаты в конкретные (топоцентрические) координаты. (Вам, вероятно, потребуется преобразовать свои эфемериды из координат ECEF (широта/долгота, вращается вместе с Землей) в ECI (инерциальные координаты, фиксированные относительно звезд), чтобы использовать формулы Келсо.

Основная идея состоит в том, чтобы вычислить положение спутника и наблюдателя в данный момент в координатах ECI, а затем определить базисные векторы «восток», «север» и «вверх» для конкретной системы координат в этот момент (с учетом сжатие Земли), затем преобразуйте положение спутника в углы обзора (азимут и угол места или прямое восхождение и склонение), как видно с места наблюдения.

person Jim Lewis    schedule 25.08.2011
comment
Я думаю, что это может быть немного за пределами моего понимания. Я ведь не умный парень. Я просматриваю код C/C++ из проекта gnss, в котором есть функция для определения высоты и азимута на основе моего местоположения и спутниковых эфемерид. Я надеюсь, что преобразовать эти значения в декартову систему не составит труда. Я предполагаю, что поскольку мой метод размещения спутника на картинке не комментировался, я делаю это разумно? - person Jason; 26.08.2011
comment
@Jason: Когда у вас есть высота и азимут, как видно из вашего местоположения, вы почти закончили! Следующий шаг зависит от того, какую картографическую проекцию вы собираетесь использовать для своих участков. Простейшим, вероятно, является построение позиций в полярных координатах, где r = (90 градусов - высота) и тета = (90 градусов - азимут). Это дает вам график с севером вверху, югом внизу и зенитом в центре. Если вам нужен увеличенный график с центром в определенной точке неба, вам понадобится более сложная проекция (возможно, касательная плоскость). - person Jim Lewis; 26.08.2011
comment
мое намерение состояло в том, чтобы преобразовать это в значение x, y, так как я действительно не знаю, как я буду отображать тета-значение в графическом интерфейсе. Как я уже упоминал ранее, мое масштабирование кажется большой проблемой, поскольку я действительно оцениваю максимальное расстояние до спутника? Я думаю об этом неправильно? - person Jason; 26.08.2011
comment
@Jason: Для полярного графика, описанного выше, если центр находится в пикселе (x0, y0) с коэффициентом масштабирования F пикселей/градус, тогда x_sat = x0 + Frcos(theta ), y_sat = y0 + Frsin(theta). Расстояние от наблюдателя до спутника не имеет значения, если вы просто наносите положение спутников на карту неба. Похоже, вам может быть полезно немного почитать о картографических проекциях и о том, как они используются. - person Jim Lewis; 26.08.2011
comment
теперь я чувствую, что задаю самый глупый вопрос ... что я использую для определения своих пикселей / степени? это будут мои градусы широты или градусы долготы? Если это широта, то я бы предположил, что это количество пикселей от моей центральной точки (90 градусов) до отметки горизонта (0 градусов). Я приложил реальные усилия, чтобы понять, как это делается. Я думаю, что проблема заключается в том, чтобы понять несколько концепций с разных сайтов и объединить их для ситуации, которая работает для меня. - person Jason; 26.08.2011
comment
@Jason: На данный момент мы работаем по азимуту/возвышению, а не по долготе/широте. Но я думаю, вы уловили идею: возьмите разницу в пикселях между отметкой горизонта (высота 0 градусов) и центральной точкой (высота 90 градусов), затем разделите на 90 градусов, чтобы получить масштабный коэффициент в пикселях/градусе. Удачи! - person Jim Lewis; 26.08.2011
comment
У меня есть точки, которые выпрыгивают далеко за пределы экрана. Мое изображение составляет 89 пикселей от центра до горизонта. az/el указаны в радианах, поэтому я конвертирую их в градусы, затем выполняю x_sat = x0 + Frcos(theta), y_sat = y0 + Frsin (тета). В то время как есть некоторые, которые, кажется, имеют хороший сюжет, есть и другие, которые настолько далеки, что не отображаются на экране. каковы последствия, если моя высота имеет отрицательное значение в радианах? Разумно ли принимать абсолютное значение этого? - person Jason; 31.08.2011
comment
@Jason: Если высота отрицательна, спутник находится ниже горизонта и, вероятно, его вообще не следует строить. Кроме того, sin и cos ожидают, что их аргумент будет в радианах, а не в градусах, поэтому, возможно, с моей стороны было немного небрежно смешать единицы измерения так, как я сделал в предыдущем комментарии. Надеюсь, вы сможете решить остальное оттуда! - person Jim Lewis; 31.08.2011