在 skyplot 上显示 gps 卫星位置

Posted

技术标签:

【中文标题】在 skyplot 上显示 gps 卫星位置【英文标题】:Displaying gps satellite positions on skyplot 【发布时间】:2011-11-03 21:13:58 【问题描述】:

我已经解析了星历数据,以便获得在我当前位置上方可见的卫星的 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);

【问题讨论】:

我还希望能够使用 WPF 和 C# 在旋转的 3D 地球上执行此操作。我希望有人知道一个库或示例代码来完成这个。 如果你能确定ECEF的位置,那么你可以把它放到Google Earth上,不用太麻烦。有一些关于如何与 GE 进行接口的示例,并且基于 x、y、z 添加一个点应该不会太难。我使用 GNSS 项目作为解析星历数据的示例代码,尽管我仍在努力验证数据是否正确。 【参考方案1】:

T.S. celestrak.com 的 Kelso 在卫星跟踪和轨道方面拥有出色的series of articles 坐标系。 This article 解释如何将卫星位置转换为 特定于站点的(拓扑中心)坐标。 (您可能需要将您的 从 ECEF 坐标(纬度/经度,随地球旋转)到 ECI(惯性)的星历 坐标,相对于星星固定)使用凯尔索公式。

基本思想是在给定的情况下计算卫星和观察者的位置 在 ECI 坐标中的瞬间,然后定义“东”、“北”和“上”基向量 为当时特定地点的坐标系(考虑到地球的 扁率),然后将卫星位置转换为视角(方位角和 从观测点看到的高度,或赤经和赤纬)。

【讨论】:

我认为这可能有点超出我的理解。毕竟我不是一个聪明的人。我正在查看 gnss 项目中的 C/C++ 代码,该代码具有根据我的位置和卫星星历确定仰角和方位角的功能。我希望将这些值转换为笛卡尔系统不会太难。我假设由于没有评论我将卫星放置在图片框上的方法,我正在以明智的方式进行操作? @Jason:一旦你有了从你所在位置看到的仰角和方位角,你就差不多完成了!下一步取决于您打算为绘图使用的地图投影。最简单的可能是在极坐标中绘制位置,r = (90 度 - 仰角),θ = (90 度 - 方位角)。这为您提供了一个顶部为正北、底部为正南、中心为天顶的图。如果你想要一个以天空的某个点为中心的放大图,你需要一个更复杂的投影(可能是切平面)。 @Jason:对于我上面描述的极坐标图,如果中心在像素 (x0, y0) 处,比例因子为 F 像素/度,则 x_sat = x0 + F rcos(theta), y_sat = y0 + Frsin(theta)。如果您只是在天空地图上绘制卫星位置,观察者与卫星的距离无关紧要。听起来您可能会从阅读地图投影及其使用方式中受益。 @Jason:此时我们正在处理方位角/仰角,而不是经度/纬度。但我认为你已经明白了:取水平标记(0 度仰角)和中心点(90 度仰角)之间的像素差,然后除以 90 度以获得以像素/度为单位的比例因子。祝你好运! @Jason:如果高度为负,则卫星位于地平线以下,可能根本不应该绘制。此外, sin 和 cos 希望他们的论点以弧度为单位,而不是度数 - 所以我可能有点草率地按照我在之前评论中所做的方式混合单位。希望你能从那里解决剩下的问题!

以上是关于在 skyplot 上显示 gps 卫星位置的主要内容,如果未能解决你的问题,请参考以下文章

gps的信号信息是直接传到我们的手机上吗

车载导航系统中GPS的定位

汽车MAP是啥?

gps位置模拟器在的使用价值

gps位置模拟器在的使用价值

Android 谷歌地图使用 GPS 定位而不是网络