地心坐标到地心

时间:2012-07-27 17:05:33

标签: c++ vector

我花了一个多星期的时间试图为此研究一个解决方案,到目前为止还没有。

给出一个单位矩阵作为我们的起始位置和方向。然后使用geotrans和起始位置的已知纬度,长度和高度,得到x,y,z地心坐标。来自(0,0,0)原点的归一化向量给出矩阵的向上和平移。但是,我需要向前和向右,以便我可以从原点到达转换矩阵以米为单位的距离,并获得大致准确的GCC。我是否拥有计算正确和前进所需的所有输入?

输入
原产地:0,0,0 全球:-1645380,-4885138,3752889
Up(Normalized):Global - Origin

期望的输出
对: ? ? ?
转发:? ? ?

1 个答案:

答案 0 :(得分:0)

这个答案和另外两个也可以在这里找到 https://gis.stackexchange.com/questions/30448/local-coordinate-to-geocentric

给定大地坐标(GDC)的单个输入

前两个步骤通过geotrans“在后台”完成,可用于至少C / C ++和Java。它解释了地球的椭球性质,可以从一个坐标系到另一个坐标系进行多次转换 1)将GDC转换为地心坐标(GCC)= vector3原点
2)获得GCC高于原点100米的点= vector3 AboveOrigin

矩阵的“向上”组件非常简单,只是从原点上方到原点的向量。当我实现这个时,我认为它是倒退的,应该是AboveOrigin - Origin但是由于我不明白的原因,如上所述。
3)vector3 Up = Origin - AboveOrigin
4)标准化上升

你需要一个垂直于你的真正向前或向北矢量和你的真实权利的向量。你的真正向上和直向正Z的交叉积,通过GCC中的轴用于geotrans,将为你提供一个临时向量。
5)vector3 temp = Up与vector3(0,0,1)交叉 6)标准化温度

这是你最后的向前或向北矢量
7)vector3 forward = Up cross temp
8)规范化前进

现在重新计算右边或东边的矢量
8)vector3 right =向上交叉温度
9)标准化右侧 10)使用向前,向右,向上和原点初始化4x4矩阵

例如: 在我们的地图上,我们有标记以十进制度描述地图的顶部,底部,左侧和右侧边缘。从那里我们得到中心并指向中心上方。

中心 - (-1645379.875,-4885137.5,3752889)
高于 - (-1645406,-4885214,3752948)

只有这两个点你可以按照步骤得到一个矩阵,可以应用于局部空间的坐标,并在GCC中找回一个合理准确的点。

为了测试这个,我通过地理过程,地图的中心,四个角以及每个边缘中间的四个点在地图上找到了9个点。忽略地球的曲率并且知道这是一个小地图我只是从GCC中的地图中心到四个边缘中的每一个的平均距离。然后我使用该X / Y距离生成9个局部坐标以通过矩阵并与通过geotrans找到的点进行比较。在测试转换点与地理点的距离时,最差的结果是顶部中间和右上部,57.3cm的不准确性,左边中间为0或接近0。