我试图用Python创建一个程序,让我检查一下大地测量软件中的大地测量应用程序。我有一个测试点,并知道我的程序目前返回全部垃圾。
我使用的公式是7 Parameter转换:
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 Lat= 0.72507962777778
我离那有很远的路。
我知道有一些有趣的事情发生在我试图转接RVa之后,但是没有发生任何事情(因此手动换位)。我显然把事情搞砸了,我很感激你的帮助。
干杯,
发布于 2020-07-07 07:26:35
Helmert变换是将笛卡儿(ECEF,也称地球中心地球固定)坐标中的一个点相对于一个坐标系,映射到相对于另一个坐标系的笛卡尔坐标。
如果要将lat、long、相对于第一个坐标系的高度坐标转换为lat、long、相对于第二个坐标系的高度坐标,则钻取如下:
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的高度,在另一个系统中转换成一个非零点。然而,如果你靠近地球表面,忽略高度引起的误差将会很小(通常是亚米)。
https://stackoverflow.com/questions/62767267
复制相似问题