2015-10-26 5 views
5

Ich muss wissen, was ist das aktuelle Zentrum der Caesium Karte.Holen Sie sich das Zentrum in Cesium Karte

Ich versuchte viewer.camera.position zu verwenden, aber es gibt immer den gleichen z-Wert (x: 16.921.255,101297915, y: 5578093,302269477, z: 12.756.274) und ich bin über die x- und y-Werte nicht sicher. Sind sie in Metern?

Vielen Dank!

EDIT: Lösung

Mit all der Hilfe, die ich bekam ich diese zusammen (Danke!):

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

Diese Funktion gibt Länge/Breite-Koordinaten in Graden.

+0

Ja, cartesianischen Werte sind in Metern. Die X-Achse zeigt von der Mitte der Erde aus in Richtung Lat 0, Lon 0, Alt 0. Die Z-Achse zeigt von der Mitte nach außen zum Nordpol. Die Y-Achse bildet ein rechtes Koordinatensystem mit den anderen beiden. Sie müssen 'Ellipsoid.cartesianToCartographic' (in der Antwort unten gezeigt) verwenden, um die Konvertierung durchzuführen. – emackey

Antwort

3

viewer.camera.position gibt Ihnen die Position an, an der sich die Kamera in X-, Y-, Z-Koordinaten in Metern in Bezug auf das Erdzentrum befindet.

Je nach dem Szenenmodus Sie Ansatz verwenden ist anders:

SCENE3D:

Um zu sehen, was die Kamera betrachten Sie den Schnittpunkt der Kamera Pick ray brauchen, um und Karte.

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

Basiert auf this thread.

Versuchen Sie auch zu überprüfen, ob die Kamera auf die Karte schaut und nicht der Himmel.

SCENE2D:

Dies ist eine einfache 2D-Ansicht mit Kamera direkt nach unten zeigt.

Von docs:

2D-Modus. Die Karte wird von oben nach unten mit einer orthographischen Projektion betrachtet

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

Fall Rest ist 2.5D oder COLUMBUS_VIEW

+1

Gute Antwort. Für den Fall, dass die Kamera nicht auf die Karte/den Globus schaut, sollten Sie vor der Verwendung des Wertes in "cartesianToCartographic" prüfen, ob "(pickPosition == undefined)" ist. – emackey

+0

Ich verwende eine 2D-Map und verwende die'getMapCenter() 'Funktion, die vorgeschlagen wurde, aber ich bekomme immer'pickPosition === undefined'. Ich bin nicht sicher, was ich tun könnte, um die richtige Position zu bekommen, ich glaube nicht, dass die Kamera nicht auf die Karte schaut ... Es ist auf dem Bildschirm. –

+0

Wenn Sie die Kamera nicht drehen und immer auf die Karte schauen, können Sie folgendes verwenden: 'var camPos = viewer.camera.PositionCartographic; console.log (camPos.longitude * (180/Math.PI)); console.log (camPos.latitude * (180/Math.PI)); ' –

Verwandte Themen