手动反向旋转应该可以解决问题。应该在某处有一个旋转球坐标系的公式,但是由于找不到它,所以这是推导('标记旋转坐标系;法线地理坐标使用普通符号):
首先使用以下命令将第二个数据集中的数据从球形(lon',lat')转换为(x',y',z')
x' = cos(lon')*cos(lat')
y' = sin(lon')*cos(lat')
z' = sin(lat')
然后使用两个旋转矩阵旋转第二个坐标系,使其与第一个“正常”坐标系重合。我们将旋转坐标轴,因此我们可以使用轴旋转矩阵。我们需要反转ϑ矩阵中的符号,以匹配ECMWF定义中使用的旋转方向,这似乎与标准的正方向不同。
由于我们要取消坐标系定义中描述的旋转,因此我们首先绕y'轴旋转ϑ =-(90 + lat0)= -55度(沿旋转的格林威治子午线),然后旋转φ=- lon0 =围绕z轴+15度):
x ( cos(φ), sin(φ), 0) ( cos(ϑ), 0, sin(ϑ)) (x')
y = (-sin(φ), cos(φ), 0).( 0 , 1, 0 ).(y')
z ( 0 , 0 , 1) ( -sin(ϑ), 0, cos(ϑ)) (z')
展开后,将变为:
x = cos(ϑ) cos(φ) x' + sin(φ) y' + sin(ϑ) cos(φ) z'
y = -cos(ϑ) sin(φ) x' + cos(φ) y' - sin(ϑ) sin(φ) z'
z = -sin(ϑ) x' + cos(ϑ) z'
然后使用转换回“正常”(纬度,经度)
lat = arcsin(z)
lon = atan2(y, x)
如果没有atan2,则可以使用atan(y / x)并检查x和y的符号来自己实现
使用三角函数之前,请确保将所有角度都转换为弧度,否则会得到怪异的结果;如果您愿意的话,最后转换回度数...
示例(旋转球坐标==>标准地理坐标):
旋转的CS的南极是(lat0,lon0)
(-90°,*)==>(-35°,-15°)
旋转CS的本初子午线在地理上为-15°经线(向北旋转55°)
(0°,0°)==>(55°,-15°)
对称性要求两个赤道在新CS中以90°/ -90°相交,或在地理坐标中以75°/ -105°相交
(0°,90°)==>(0°,75°)
(0°,-90°)==>(0°,-105°)
编辑:改写了答案,这得益于whuber非常有建设性的评论:矩阵和扩展现在已经同步,对旋转参数使用适当的符号;增加了对矩阵定义的参考;从答案中删除了atan(y / x); 添加了转换示例。
编辑2:无需显式转换为笛卡尔空间就可以得出相同结果的表达式。的x
,y
,z
在结果可以与它们的对应的表达式取代,并且同样可以被重复用于x'
,y'
和z'
。应用一些三角恒等式之后,出现以下单步表达式:
lat = arcsin(cos(ϑ) sin(lat') - cos(lon') sin(ϑ) cos(lat'))
lon = atan2(sin(lon'), tan(lat') sin(ϑ) + cos(lon') cos(ϑ)) - φ