3

セシウムでエベレストの頂上に点を置こうとしています。昨夜の時点で最も有力な候補は、測地から 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]}
}
4

2 に答える 2

6

ここにはいくつかの要因が働いています。

第 1 に、セシウムが地形に使用するソース データは、エベレスト山の頂上の高さが予想よりも低い可能性があります。CGIAR SRTM データセットを使用しているため、FAQ の次の項目が関連しています。

一部の山岳地域のピークが本来よりも大幅に低いのはなぜですか?

前述のように、多くのオリジナル データ ボイドは、山間部や積雪地域に集中しています。したがって、実際には高山地域の多くのピークが補間されます。内挿に高解像度の共変数を使用しないと、内挿はデータの空白が実際にピークであることを識別できず、ピークを「平坦化」する傾向があり、その領域の真の標高が過小評価されることにつながります。この問題は、バージョン 4 で大部分が解決されています。

彼らは、セシウムが使用するバージョンであるv4で大部分が解決されていると言っているので、この最初の要因が実際の問題ではないことを願っています.

次に、セシウムで使用するためのソース地形データの処理により、ピークが少し平坦になる可能性があります。この問題はすぐに、できれば数か月以内に修正される予定です。

第三に、ウィキペディアは平均海面からの標高 (MSL) として高さを提供しています。MSL は数学的に扱いにくい複雑なサーフェスであるため、 geodetic2ecef はそうしていません。代わりに、Cesium のように、高度が WGS84 楕円体に相対的であると想定しています。

NGA には、ジオイド高としても知られる WGS84 楕円体上の MSL の高さを見つけるために使用できる Web サイトがあります

エベレスト山の頂上 (北緯 27 度 59 分 17 秒、東経 86 度 55 分 31 秒) の MSL は、WGS84より 28.73 メートル低いと報告されています。ウィキペディアで報告されている山頂の高度からその数値を引くと、少なくとも近づくはずです。

このページには、プログラムによるジオイドの高さの計算に関する情報があります: http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm96/egm96.html

係数から高さを計算する代わりに、15 分のジオイド高さファイルを補間することをお勧めします。

質問に直接関係しない他のいくつかのメモ:

  • Cesium には、LLA (これを Cartographic と呼びます) を Cartesian に変換するコードがあります。を参照してくださいEllipsoid.cartographicToCartesian
  • デカルトの代わりに cartographicDegrees または cartographicRadians で CZML の座標を指定すると、Cesium が自動的に変換を行います。ただし、高さを指定するときはジオイドを調整する必要があります。また、経度が最初であることを忘れないでください。
于 2013-04-30T12:23:59.000 に答える
1

Proj4js - 有名な proj4 ライブラリのポート - があなたのために仕事をするかもしれません.

于 2013-04-30T12:27:16.840 に答える