3D(7 参数)Helmert 变换在 Python 中不起作用

3D (7 Parameter) Helmert Transformation Not Working in Python

我正在尝试在 Python 中创建一个程序,让我检查我的测量软件中的大地测量应用程序吐出的大地测量变换。我有一个测试点并且知道我的程序目前 returns 完全是垃圾。

我使用的公式是7参数Halmert变换:

Vb = T + (1 + s * 10^−6)•R•Va

我的代码是:

import numpy as np
from math import pow

# Input Parameters
Tx = 89.5          # in metres
Ty = 93.8
Tz = 123.1
Rx = 0             # in arcsecs
Ry = 0
Rz = 0.156
s = -1.2           # ppm
Vax = 58.000086817 # Lat
Vay = 0.723469322  # Long
Vaz = 0            # Height

# Arrays
T = np.array([[Tx], [Ty], [Tz]])
R = np.array([[1, -Rz, Ry], 
              [Rz, 1, -Rx], 
              [-Ry, Rx, 1]])
Va = np.array([[Vax], [Vay], [Vaz]])

# Calculations
RVa = R * Va
RVa = np.sum(RVa, axis=1)
RVa = np.array([[RVa[0]], [RVa[1]], [RVa[2]]])

S = 1 + s * pow(10, -6)

SRVa = S * RVa

Vb = T + SRVa

正确的输出是:

Lat = 58.0007206472222 Long = 0.72507962777778

我还有很长的路要走。

我知道发生了一些有趣的事情,因为我在求和后尝试转置 RVa 但什么也没发生(因此手动转置。我显然把事情搞砸了,感谢任何帮助。

干杯,

Helmert 变换用于将相对于一个坐标系的笛卡尔坐标(ECEF,又名地心地球固定)坐标映射到相对于另一个坐标系的笛卡尔坐标。

如果要将相对于第一个坐标系的纬度、经度、高度坐标转换为相对于第二个坐标系的纬度、经度、高度坐标,钻取是:

Convert the lat,long,height coordinates to cartesians
Apply Helmert to those cartesians, getting cartesians relative to the second coordinate system
Convert those cartesians to lat,long,height in second coordinate system

几点:

Helmert 变换参数通常用于地球的椭圆体模型。忽略这一点,使用球形地球会引入误差,在数十米甚至数百米的尺度上。

当从笛卡尔坐标转换到笛卡尔坐标时,高度是椭圆体高度,即从椭圆体到您的点沿椭圆体法线的距离。您很可能将一个系统中的 0 高度转换为另一个系统中的非零点。但是,如果您靠近地球表面,则忽略高度引起的误差会很小(通常为亚米)。