2016-09-06 29 views
1

私は緯度/経度と高度の飛行経路を持っており、これをcesium.jsのX、Y、Zのカートンに変換する必要があります。 私は、私の機能から正しい結果を得ているようには見えないので、これを変換しようとしている壁にぶち当たっています。極座標→直交座標の関数が正しいデータを出力しない

var R = 6371; 
function polarToCartesian(latitude, longitude, elevation){ 
    x = (R+elevation) * math.cos(latitude) * math.cos(longitude); 
    y = (R+elevation) * math.cos(latitude) * math.sin(longitude); 
    z = (R+elevation) * math.sin(latitude); 

    var ar = [x,y,z]; 
    return ar; 
} 

極座標とデカルトの正しい公式を使用してはいけません。また、正しい地球半径を持たないでください。私は、半径が6371でなければならないが、同じSOの質問を参考にすることはできないようだ。

私のコードが正しいかどうかは部分的にチェックされています。手動で、地球の半径+飛行経路の高度を手動で加算し、これがx、y、zベクトルの長さに等しいかどうかを確認します。例えば

:私は私の機能この

-93.028,44.6942,7800 

緯度を与えるときのy、zの(3689.2472215653725,3183.2401988117012,13306.90338789763) が出力されるxは、長い間、標高

は、誰かが達成するために右のjsのコードを見つけるために私を指すでしたこの変換?

+0

グローブ上にポイントを配置する際の極座標に慣れていない、[私はウィキペディアのページを確認しました](https://en.wikipedia.org/wiki/Polar_coordinate_system#Converting_between_polar_and_Cartesian_coordinates)、あなたが正しいとは思わない入力。地球上の極座標を持つリソースにリンクできますか?また、あなたがトップに立つ 'R'は何ですか? – broguinn

+0

また、仰角が地球の中心からの距離として定義されている場合、3次元格子が地球の中心に(0、0)あるとすれば、それは 'z'と同じ値であってはいけませんか? – broguinn

答えて

1

だから、上記のように書き換えることができます。 Cartesian3.fromDegreesおよびCartesian3.fromDegreesArrayを参照してください。例えば

:メートルではなくキロメートル:結果は、セシウムが期待するようになり

var result = Cesium.Cartesian3.fromDegrees(latitude, longitude, elevation); 

注意。これは楕円体の形状も考慮に入れています。デフォルトはWGS84です(地球は完全球ではなく、あなたの関数が推測するように)。

1

ヤフースクリプト自体に問題はありませんです。しかし、方程式が正しくありません。 Lat/Long/AltからSpherical(別名デカルト)、which was answered hereに変換しようとしています。あなたはこのためにセシウムの組み込み関数を使用する必要があります

function polarToCartesian(latitude, longitude, elevation){ 
    const x = math.cos(latitude) * math.cos(longitude) * elevation; 
    const y = math.cos(latitude) * math.sin(longitude) * elevation; 
    const z = math.sin(latitude) * elevation; 

    return [x, y, z]; 
} 
関連する問題