首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3D (7参数) Helmert变换在Python中不工作

3D (7参数) Helmert变换在Python中不工作
EN

Stack Overflow用户
提问于 2020-07-07 02:30:08
回答 1查看 899关注 0票数 0

我试图用Python创建一个程序,让我检查一下大地测量软件中的大地测量应用程序。我有一个测试点,并知道我的程序目前返回全部垃圾。

我使用的公式是7 Parameter转换:

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

我的代码是:

代码语言:javascript
复制
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之后,但是没有发生任何事情(因此手动换位)。我显然把事情搞砸了,我很感激你的帮助。

干杯,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-07 07:26:35

Helmert变换是将笛卡儿(ECEF,也称地球中心地球固定)坐标中的一个点相对于一个坐标系,映射到相对于另一个坐标系的笛卡尔坐标。

如果要将lat、long、相对于第一个坐标系的高度坐标转换为lat、long、相对于第二个坐标系的高度坐标,则钻取如下:

代码语言:javascript
复制
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的高度,在另一个系统中转换成一个非零点。然而,如果你靠近地球表面,忽略高度引起的误差将会很小(通常是亚米)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62767267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档