セシウムでエベレストの頂上に点を置こうとしています。昨夜の時点で最も有力な候補は、測地から ecef への変換を行うために借りたコード (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) を掛けました。[302995.41122130124, 5640733.98308375, 2981975.8695256836] の ECF ロケーションを取得します。デフォルトのテレイン プロバイダー (チュートリアルで説明) では、このポイントはエベレスト山の頂上よりもかなり高くなります。
関連する 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]}
}