我知道还有其他类似的问题,但大多数问题只涉及将一个问题转换为另一个问题。但我正在寻找一种互相转换的算法。简单地使用其中一个并没有产生预期的结果。
就我的目的而言,单位范围更可接受。任何半径值都是1。
以下是我目前使用简单的psudocode执行此操作的方法。
从纬度和经度到单位球面上的点。
x = cos( longitude ) * sin( latitude ) y = sin( longitude ) * sin( latitude ) z = cos( latitude )
从单位球体上的3D坐标到纬度和经度。
latitude = acos( z ) longitude = atan2( x, y )
然而,这些都是不可逆的,我的三角学不是应该的。
答案 0 :(得分:2)
始终可以从lat / long转换为xyz,但在sin(lat) == 0
时从xyz转换为lat / long会失败。在纬度/长距离空间中没有解决方案,所以请远离它
除此之外,您的公式只有一个小错误,其中atan2
需要y
然后x
代替x
然后y
。