这是我在这个论坛上的第一篇文章,我对编程很陌生。我想构建一个应用程序,我可以在其中准确地看到一些 gps 值在我的手机上的位置。我知道很多应用程序,例如 junaio、mixare 和其他应用程序,但它们只显示对象的方向并且它们不是很准确(它们没有将其投影到屏幕上的确切位置的目标) - 所以我想自己建造。我在 android 中编程,但我认为在 iPhone 上会是一样的。
我按照dabhaid建议的步骤操作:
有三个步骤。
1) 使用传感器确定您的位置和方向。
2) 通过使用例如大圆距离和方位确定已知GPS坐标的相对位置和方位,从GPS坐标空间转换为平面坐标空间。(您的设备使用此方案保持在坐标空间的原点)
3)做一个透视投影http://en.wikipedia.org/wiki/3D_projection#Perspective_projection来确定物体应该出现在你的显示器(好的,你的相机传感器)的平面上,所以你可以增强它们。
第 1 步:简单,我从我的移动设备 (x,y,z) 获得 gps 位置和所有方向。为了进一步改进,我可以使用一些算法来平滑这些值(平均值、低过滤器等)。
第2步:我不知道,平面坐标空间究竟是什么意思。我有一些不同的方法来转换我的 gps 坐标空间。其中之一是 ECEF(以地球为中心),其中 0,0,0 是地球的中心。不知何故,这对我来说看起来不太好,因为一个轴的每一个微小变化都会导致其他两个轴的变化。所以如果我改变高度,所有的 3 轴都会改变。我不知道我是否可以使用此坐标系执行第 3 步。在第 2 步中提到:使用半正弦- 这会给我到点的距离,但我没有从中得到 x,y,z。我是否必须使用三角法(方位(α)+ 距离(斜边))来计算 x,y?
第3步:这个方法看起来真的很酷!如果我有来自Step 2的坐标空间,我可以使用维基百科上的公式计算d_x,d_y,d_z。但是在这一步之后,我还没有完成,因为我只有坐标并且要将它投影到我的屏幕上,我只需要两个坐标?来自维基百科的文本通过计算b_x,b_y继续他们使用e_x,e_y,e_z这是查看者相对于显示表面的位置 - >如何从我的移动设备获取这些值?(安卓/ios)。维基百科建议的另一种方法是:使用维基百科上提到的公式计算b_x,b_y 。在这个公式中,他们使用 s_x,s_y,即屏幕尺寸和r_x,r_y是记录表面大小。同样,如何从移动设备获取记录表面?
我在互联网上找不到任何东西。似乎没有人在 android/ios 上曾经实现过透视投影......
非常感谢您的所有回答!此外,指向有用网站的链接也会有所帮助!