5

これらの値を示す表示を更新できるように、Cesium ビューでカメラの位置、方向、ピッチ、またはロールが変更されるたびに検出したいと考えています。かなりの検索を行った後、最終的に、ウィジェットの Scene オブジェクトのまったく直感的ではないイベントpreRenderまたはイベントにイベント ハンドラーを追加できることを発見しました。postRenderただし、これらのイベントは両方とも、1 秒あたり何百回も継続的に発生します。クロックティックごとに1回発砲していると思います。マップのビューが変更された後に単に発生するように登録できる別のイベントはありますか? moveendリーフレットのイベントに近いものを探しているんですけどpreRenderpostRender

それができない場合、何かが実際に変更された場合にのみ取得preRenderまたは起動する方法はありますか?postRender

4

5 に答える 5

17

タイマーを使用しない別の解決策は、カメラの移動開始イベントと移動終了イベントをリッスンすることです。

viewer.camera.moveStart.addEventListener(function() { 
     // the camera started to move
});
viewer.camera.moveEnd.addEventListener(function() { 
     // the camera stopped moving
});

これらは、探しているイベントのように聞こえます。

[編集] : 慣性スピンとズームはデフォルトで有効になっており、見た目はクールですが、非常に簡単に無効にすることができます。これにより、moveEnd イベントが期待どおりに発生するようになります。慣性を無効にする方法は次のとおりです。

var viewer = new Cesium.Viewer();

viewer.scene.screenSpaceCameraController.inertiaSpin = 0;
viewer.scene.screenSpaceCameraController.inertiaTranslate = 0;
viewer.scene.screenSpaceCameraController.inertiaZoom = 0;
于 2015-09-02T21:09:19.337 に答える
3

cesium v​​1.30 を使用すると、次のコードを使用できます。

viewer.camera.changed.addEventListener(function() {
  var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.heading))
  console.log('Heading:', deg)

  var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.pitch))
  console.log('Pitch:', deg)
})
于 2017-02-04T19:45:25.097 に答える