2015-10-26 39 views
5

Muszę wiedzieć, jakie jest aktualne centrum mapy cezu.Pobierz centrum w Cesium Map

Próbowałem użyć viewer.camera.position, ale zawsze daje taką samą wartość z (x: 16921255.101297915, y: 5578093.302269477, z: 12756274) i nie jestem pewien wartości x i y. Czy są w metrach?

Wielkie dzięki!

EDIT: Rozwiązanie

Z wszelką pomoc dostałem Ja to razem (dzięki!):

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

Funkcja ta daje długość/szerokość współrzędne w stopniach.

+0

Tak, wartości kartezjańskie są w metrach. Oś X wskazuje na środek Ziemi w kierunku Lat 0, Lon 0, Alt 0. Oś Z wskazuje od środka w kierunku bieguna północnego. Oś Y tworzy prawy układ współrzędnych z pozostałymi dwoma. Musisz użyć 'Ellipsoid.cartesianToCartographic' (pokazanego w odpowiedzi poniżej), aby wykonać konwersję. – emackey

Odpowiedz

3

viewer.camera.position podaje pozycję, w której kamera znajduje się w współrzędnych X, Y, Z w metrach w stosunku do środka ziemi.

zależności od sceny tryb używasz podejście jest inna:

SCENE3D:

Aby zobaczyć, co jest aparat patrząc trzeba dostać punkt przecinają pick ray aparatu i mapę.

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

Na podstawie this thread.

Spróbuj również sprawdzić, czy kamera patrzy na mapę, a nie na niebo.

SCENE2D:

Jest to prosty 2D Widok z kamery wskazując bezpośrednio w dół.

Od docs:

tryb 2D. Mapa jest oglądany z góry na dół z ortograficznych projekcji

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

Pozostałe sprawy jest 2.5D lub COLUMBUS_VIEW

+1

Dobra odpowiedź. W przypadku, gdy kamera nie patrzy na mapę/globus, powinieneś sprawdzić, czy '(pickPosition === undefined)' przed użyciem wartości w 'cartesianToCartographic'. – emackey

+0

Używam mapy 2D i korzystam z sugerowanej funkcji'getMapCenter() ', ale zawsze otrzymuję'pickPosition === undefined'. Nie jestem pewien, co mogę zrobić, aby uzyskać właściwą pozycję, nie sądzę, że kamera nie patrzy na mapę ... Jest na ekranie. –

+0

W prostym przypadku, jeśli nie obracasz kamerą i zawsze patrzysz w dół na mapę, możesz użyć: 'var camPos = viewer.camera.positionCartographic; console.log (camPos.longitude * (180/Math.PI)); console.log (camPos.latitude * (180/Math.PI)); ' –