在增强现实应用程序中将纬度、经度位置转换为屏幕上的位置

3
这是我在论坛上的第一篇帖子,我对编程非常陌生。我想开发一个应用程序,在手机上可以准确地查看某些 GPS 值的位置。我知道很多应用程序,比如 junaio、mixare 等等,但它们只显示到物体的方向,不太精确(它们没有将其投影到屏幕上的确切位置),因此我想自己构建。我在 Android 上进行编程,但我认为在 iPhone 上也是一样的。
我按照 dabhaid 的建议步骤操作:

有三个步骤。

1)使用传感器确定您的位置和方向。

2)通过使用例如大圆距离和方位角确定已知 GPS 坐标的相对位置和方位角,从 GPS 坐标空间转换为平面坐标空间。(使用此方案,您的设备保持在坐标空间的原点处)

3)进行透视投影http://en.wikipedia.org/wiki/3D_projection#Perspective_projection,以找出对象应该出现在哪个平面(好吧,您的相机传感器),以便您可以增强它们。

步骤 1:很容易,我有移动设备的 GPS 位置和所有方向 (x、y、z)。为了进一步改善,我可以使用一些算法来平滑这些值(平均值、低通滤波器等)。 步骤 2:我不知道什么是平面坐标空间。我有一些不同的方法来转换我的 GPS 坐标空间。其中之一是 ECEF(地心坐标系),其中 0,0,0 是地球的中心。但是,每个轴的微小变化都会导致其他两个轴的变化,因此如果我改变高度,所有 3 个轴都会改变。我不知道我是否可以使用此坐标系遵循步骤 3。
在步骤 2 中提到了“使用 haversine”-这将给我距离点的距离,但我无法从中获得 x、y、z。我必须通过使用三角函数(方位角(α)+距离(斜边))计算 x、y 吗?
第三步:这个方法看起来非常酷!如果我有了第二步中的坐标空间,我就可以使用维基百科上的公式来计算d_x、d_y、d_z。但是在这一步之后,我还没有完成,因为我只有坐标,而要将其投影到屏幕上,我只需要两个坐标?维基百科的文字继续通过计算b_x、b_y来进行。他们使用e_x、e_y、e_z,这是观察者相对于显示表面的位置->我如何从我的移动设备(Android / iOS)获取这些值?维基百科建议的另一种方法是:通过使用维基百科上提到的公式来计算b_x、b_y。在这个公式中,他们使用s_x、s_y表示屏幕大小,r_x、r_y表示录制表面大小。同样,我如何从我的移动设备得到录制表面呢?
我在互联网上找不到任何相关的信息。似乎在Android / iOS上,没有人曾经实现过透视投影......
非常感谢您所有的答案!同时,有用网站的链接也会很有帮助!
2个回答

2

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接