用于经纬度和3D点的可逆算法

时间:2013-12-17 19:09:36

标签: algorithm geometry latitude-longitude coordinate-transformation

我知道还有其他类似的问题,但大多数问题只涉及将一个问题转换为另一个问题。但我正在寻找一种互相转换的算法。简单地使用其中一个并没有产生预期的结果。

就我的目的而言,单位范围更可接受。任何半径值都是1。

以下是我目前使用简单的psudocode执行此操作的方法。

从纬度和经度到单位球面上的点。

x = cos( longitude ) * sin( latitude )
y = sin( longitude ) * sin( latitude )
z = cos( latitude )

从单位球体上的3D坐标到纬度和经度。

latitude = acos( z )
longitude = atan2( x, y )

然而,这些都是不可逆的,我的三角学不是应该的。

1 个答案:

答案 0 :(得分:2)

始终可以从lat / long转换为xyz,但在sin(lat) == 0时从xyz转换为lat / long会失败。在纬度/长距离空间中没有解决方案,所以请远离它 除此之外,您的公式只有一个小错误,其中atan2需要y然后x代替x然后y