2015-10-26 20 views
5

Ho bisogno di sapere qual è il centro attuale della mappa del cesio.Get center in Cesio Mappa

Ho provato a utilizzare viewer.camera.position ma fornisce sempre lo stesso valore z (x: 16921255.101297915, y: 5578093.302269477, z: 12756274) e non sono sicuro dei valori x e y. Sono in metri?

Grazie mille!

EDIT: Soluzione

Con tutto l'aiuto che ho ricevuto ho messo questo insieme (grazie!):

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)); 
    } 
}; 

Questa funzione fornisce longitudine/latitudine coordinate in gradi.

+0

Sì, valori cartesiani sono in metri. L'asse X punta dal centro della Terra verso Lat 0, Lon 0, Alt 0. L'asse Z punta dal centro verso il Polo Nord. L'asse Y forma un sistema di coordinate a destra con gli altri due. Devi usare 'Ellipsoid.cartesianToCartographic' (mostrato nella risposta sotto) per eseguire la conversione. – emackey

risposta

3

viewer.camera.position fornisce la posizione in cui la telecamera si trova in coordinate X, Y, Z in metri rispetto al centro di terra.

A seconda della modalità scena che si sta utilizzando l'approccio è diverso:

SCENE3D:

Per vedere a che cosa sta la telecamera guardando è necessario per ottenere il punto di intersezione dei raggi scelta della fotocamera e mappa.

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)); 
} 

Basato su this thread.

Prova anche a controllare se la telecamera sta guardando la mappa e non il cielo.

SCENE2D:

Questa è una vista semplice 2D con telecamera puntata direttamente verso il basso.

Da docs:

modalità 2D. La mappa viene visualizzato top-down con una proiezione ortogonale

var camPos = viewer.camera.positionCartographic; 
console.log(camPos.longitude * (180/Math.PI)); 
console.log(camPos.latitude * (180/Math.PI)); 

caso rimanente è 2,5D o COLUMBUS_VIEW

+1

Buona risposta. Nel caso in cui la telecamera non stia guardando la mappa/globo, è necessario verificare se '(pickPosition === undefined)' prima di usare il valore in 'cartesianToCartographic'. – emackey

+0

Sto utilizzando una mappa 2D e utilizzo della funzione'getMapCenter() 'suggerita, ma ottengo sempre'pickPosition === undefined'. Non sono sicuro di cosa potrei fare per ottenere la giusta posizione, non penso che la telecamera non stia guardando la mappa ... È sullo schermo. –

+0

Nel caso semplice, se non stai ruotando la fotocamera e guardi sempre verso il basso sulla mappa, puoi usare questo: 'var camPos = viewer.camera.positionCartographic; console.log (camPos.longitude * (180/Math.PI)); console.log (camPos.latitude * (180/Math.PI)); ' –