我试图在Cesium中放置一个位于珠穆朗玛峰顶部的点。截至昨晚,我最有可能使用的是我从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
我从维基百科上获取了珠穆朗玛峰顶部的经度/纬度/高度信息。在将对象定位到我的CZML中之前,我使用上述代码提供的ECF坐标乘以1000(m/km)。我得到的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]}
}