如何转换大地位置,随着铯地形模型作品的ECF位置(How do I convert a geodet

2019-09-01 11:59发布

我试图把一个点珠穆朗玛峰的顶部铯 。 我最有可能的候选截至昨晚是我借来做大地到地心固定转换(从PySatel.coord)的代码。 经审查今天上午,这似乎是正确的:

a = 6378.137
b = 6356.7523142
esq = 6.69437999014 * 0.001
e1sq = 6.73949674228 * 0.001
f = 1 / 298.257223563


def geodetic2ecef(lat, lon, alt):
    """Convert geodetic coordinates to ECEF.

    Units are degrees and kilometers.
    """
    lat, lon = radians(lat), radians(lon)
    xi = sqrt(1 - esq * sin(lat))
    x = (a / xi + alt) * cos(lat) * cos(lon)
    y = (a / xi + alt) * cos(lat) * sin(lon)
    z = (a / xi * (1 - esq) + alt) * sin(lat)
    return x, y, z

我把经/纬度/ ALT为山高峰 珠峰维基百科。 我相乘的ECF坐标由上述代码在我CZML定位所述对象之前提供由1000(米/公里)。 我得到的ECF位置:302995.41122130124,5640733.98308375,2981975.8695256836。 用默认的地形提供商(在所描述的教程 ),这点比山的峰显著更高 珠穆朗玛峰。

以下是相关CZML片段:

{"position": 
  {"cartesian": [302995.41122130124, 5640733.98308375, 2981975.8695256836]}, 
 "id": "ellipsoid-1", 
 "ellipsoid": 
   {
     "radii": {"cartesian": [3545.5375159540376, 
                              164.44985193756034, 
                              164.62702908803794]}, 
     "material": {"solidColor": {"color": {"rgba": [0, 255, 0, 100]}}}
   }, 
 "orientation": {"unitQuaternion": [0.00014107125875577922, 
                                    -0.011462389405915903, 
                                    -0.010254110199791062, 
                                    -0.70702315200093502]}
}

Answer 1:

有几个因素在这里工作。

首先,使用铯地形源数据可能对珠穆朗玛峰的顶峰低于预期的高度。 我们使用CGIAR SRTM数据集,所以在他们的常见问题这个项目是相关的:

一些山区为什么会有峰显著低于他们应该是什么?

正如前面提到的,很多原始数据的空隙都集中在山区和冰雪覆盖的地区。 因此,在高山区许多山峰实际上插值。 如果不使用高分辨率共变量插值,插值不能识别的数据空白实际上是一个峰值,并趋于“扁平化”的高峰,导致该区域的真实海拔低估。 此问题已在第4版基本得到解决。

他们说,这是在V4基本解决,该版本采用铯,所以希望这第一个因素是不实际的问题。

其次,我们与使用铯源地形数据的处理可以拼合峰位。 这个问题将很快纠正,希望在未来几个月内。

三,维基百科提供了高度的海拔高于平均海平面(MSL)。 MSL是一个复杂的表面,很难用数学上的工作,所以你geodetic2ecef没有这样做。 相反,它像铯,是假设海拔高度相对于WGS84椭球,这是一个好得多的表面工作。

NGA有一个网站,可以用来找到MSL的WGS84椭球以上的高度,也被称为大地水准面: http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/intpt.html

它报告为珠穆朗玛峰(27°59'17“N,86°55'31”E)的峰,MSL 低于 WGS8428.73米。 如果减去报道维基百科上峰的高度,这个数字,你应该得到更近,至少。

这个页面有对计算大地水准面信息编程: http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html

我建议插在15分钟的大地水准面文件而不是从系数计算的高度。

一对夫妇的其他注意事项没有直接关系的问题:

  • 铯具有代码转换LLA(我们称之为制图)笛卡尔。 见Ellipsoid.cartographicToCartesian
  • 您可以在cartographicDegrees或cartographicRadians代替笛卡尔指定CZML坐标,然后将铯自动进行转换,为你。 您还必须指定高度时,但调整为大地水准面。 另外,不要忘记,经度是第一。


Answer 2:

Proj4js -著名proj4库的端口-可能会为你做的工作。



文章来源: How do I convert a geodetic location to an ECF position that works with the terrain model in Cesium