2015-10-26 31 views
5

セシウムマップの現在の中心点は何か知る必要があります。セシウムの中心を取得する

私はviewer.camera.positionを使用しようとしましたが、常に同じz値(x:16921255.101297915、y:5578093.302269477、z:12756274)を与え、x値とy値についてはわかりません。彼らはメートルですか?

ありがとうございます!

編集:私が得たすべての助けを借りて解決

私は一緒にこれを置く(感謝!):

getPosition(){ 
    if (viewer.scene.mode == 3) { 
     var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth/2, viewer.container.clientHeight/2); 
     var pickRay = viewer.scene.camera.getPickRay(windowPosition); 
     var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene); 
     var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition); 
     console.log(pickPositionCartographic.longitude * (180/Math.PI)); 
     console.log(pickPositionCartographic.latitude * (180/Math.PI)); 
    } else if (viewer.scene.mode == 2) { 
     var camPos = viewer.camera.positionCartographic; 
     console.log(camPos.longitude * (180/Math.PI)); 
     console.log(camPos.latitude * (180/Math.PI)); 
    } 
}; 

この関数は、経度/緯度は度座標できます。

+0

はい、デカルト座標値はメートルであるです。 X軸は、地球の中心から緯度0、Lon 0、Alt 0に向かって指しています.Z軸は中心から北極に向いています。 Y軸は他の2つの座標系と右の座標系を形成します。変換を実行するには、 'Ellipsoid.cartesianToCartographic'(以下の答えに示されています)を使わなければなりません。 – emackey

答えて

3

viewer.camera.positionは、カメラがX、Y、Z座標でアースセンターとの関係でメートル単位で表示される位置を提供します。あなたがアプローチを使用しているシーンモードによっては

異なります

SCENE3D:

カメラがあなたを見ているもので、参照するためには、カメラのピック線の交差ポイントを取得する必要があります地図。

function getMapCenter() {    
     var windowPosition = new Cesium.Cartesian2(viewer.container.clientWidth/2, viewer.container.clientHeight/2); 
     var pickRay = viewer.scene.camera.getPickRay(windowPosition); 
     var pickPosition = viewer.scene.globe.pick(pickRay, viewer.scene); 
     var pickPositionCartographic = viewer.scene.globe.ellipsoid.cartesianToCartographic(pickPosition); 
     console.log(pickPositionCartographic.longitude * (180/Math.PI)); 
     console.log(pickPositionCartographic.latitude * (180/Math.PI)); 
} 

this threadに基づく。

また、カメラが空ではなく地図を見ているかどうかを確認してください。

SCENE2D:

これは、カメラを直接下向き有する単純な2次元図です。

2Dモード:ドキュメントから

。地図を見た正投影

ケース残り
var camPos = viewer.camera.positionCartographic; 
console.log(camPos.longitude * (180/Math.PI)); 
console.log(camPos.latitude * (180/Math.PI)); 

とトップダウン2.5D又はCOLUMBUS_VIEW

+1

良い答え。カメラが地図/地球儀を見ていない場合は、 'cartesianToCartographic'の値を使う前に'(pickPosition === undefined) 'がテストされている必要があります。 – emackey

+0

私は2Dマップを使用していて、提案された'getMapCenter() '関数を使用していますが、私はいつも'pickPosition === undefined'を取得します。 私は正しいポジションを得るために何ができるかわからないが、カメラが地図を見ていないとは思っていない。それは画面上にある。 –

+0

単純なケースでは、カメラを回転させずにマップを常に見下ろしている場合は、 'var camPos = viewer.camera。positionCartographic; console.log(camPos.longitude *(180/Math.PI)); console.log(camPos.latitude *(180/Math.PI)); ' –

関連する問題