2014-02-08 9 views
8

Ich möchte cesium initialisieren, so dass die Karte auf einige bestimmte Koordinaten zentriert wird anstatt auf die Standardkoordinaten. Ich habe den folgenden Code für die Initialisierung:Wie setze ich Cesium JS Kartenzentrum (Koordinaten: Breiten- und Längengrad)

var map = new Cesium.CesiumWidget('map-js'); 
map.centralBody.terrainProvider = new Cesium.CesiumTerrainProvider({ 
    url : 'http://cesiumjs.org/smallterrain' 
}); 

Regel mit anderen Mapping-Bibliotheken, würde ich das Zentrum bei der Initialisierung gesetzt, zB auf MapBox:

map = L.mapbox.map('map-js', 'api-key').setView([42.12, 12.45], 9); 

Wie man das mit Cäsium?

Antwort

6

Versuchen Sie, diese nach dem ersten Codeblock Zugabe oben:

var scene = map.scene; 
var ellipsoid = Cesium.Ellipsoid.WGS84; 
var west = Cesium.Math.toRadians(-77.0); 
var south = Cesium.Math.toRadians(38.0); 
var east = Cesium.Math.toRadians(-72.0); 
var north = Cesium.Math.toRadians(42.0); 

var extent = new Cesium.Rectangle(west, south, east, north); 
scene.camera.viewRectangle(extent, ellipsoid); 

Weitere Beispiele in unserer Camera Demo zur Verfügung stehen.

EDIT (Mai 2014): Aufgrund der Caesium-API ändert, wird .getCamera().camera, die .controller der Kamera umbenannt wurde entfernt und rollte in die Kamera selbst, und Extent wird Rectangle umbenannt. Der obige Code spiegelt nun die neue API wider. Eine vollständige Liste der Unterbrechungsänderungen finden Sie unter CHANGES.md.

+0

wie kann Ich konvertiere eine lat/long Koordinate in einen Extent? Ich bin verwirrt – nemesisdesign

+0

Wenn Sie ein einzelnes lat/lon-Paar haben, anstatt 4 Ecken, erstellen Sie einfach die Ecken, indem Sie einen Offset von Ihrem Punkt hinzufügen oder subtrahieren. Je größer der Versatz, desto "ausgezoomt" wird die Kamera. – emackey

+0

was: Flug = Cesium.CameraFlightPath.createAnimationCartographic (map.scene, { \t \t \t \t Ziel: Cesium.Cartographic.fromDegrees (coords.lng, coords.lat, coords.zoom), \t \t \t \t Dauer: 0 \t \t \t}); – nemesisdesign

2

Wenn Sie den aktuellen „Zoom“ (von Ellipsoid aka Kameraabstand) zu halten und haben nur lon/lat, könnten Sie setView() nennen und die aktuelle Kamerahöhe verwenden, wie:

viewer.camera.setView({ 
     destination : Cesium.Cartesian3.fromDegrees(
      longitude, 
      latitude, 
      Cesium.Ellipsoid.WGS84.cartesianToCartographic(viewer.camera.position).height 
     ) 
    }); 
Verwandte Themen