Как установить центр карты Cesium JS (координаты: широта и долгота)

Я хотел бы инициализировать цезий, чтобы карта центрировалась на некоторых конкретных координатах, а не на координатах по умолчанию. У меня есть следующий код инициализации:

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

Обычно с другими картографическими библиотеками я бы устанавливал центр при инициализации, например, на mapbox:

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

Как это сделать с цезием?


person nemesisdesign    schedule 08.02.2014    source источник


Ответы (2)


Попробуйте добавить это после первого блока кода выше:

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

Другие примеры доступны в нашей демонстрации камеры.

EDIT (май 2014 г.): из-за изменений в Cesium API .getCamera() переименовывается в .camera, .controller камеры удаляется и вставляется в саму камеру, а Extent переименовывается в Rectangle. Приведенный выше код теперь отражает новый API. Полный список критических изменений см. на странице CHANGES.md. эм>

person emackey    schedule 09.02.2014
comment
как я могу преобразовать координату lat/long в экстент? я озадачен - person nemesisdesign; 12.02.2014
comment
Если у вас есть одна пара широта/долгота, вместо 4 углов просто создайте углы, добавив или вычтя смещение от вашей точки. Чем больше смещение, тем сильнее будет камера. - person emackey; 12.02.2014
comment
как насчет: Flight = Cesium.CameraFlightPath.createAnimationCartographic(map.scene, { пункт назначения: Cesium.Cartographic.fromDegrees(coords.lng, coords.lat, coords.zoom), продолжительность: 0}); - person nemesisdesign; 12.02.2014

Если вы хотите сохранить текущее "масштабирование" (также известное как расстояние камеры от эллипсоида) и иметь только долготу/широту, вы можете вызвать setView() и использовать текущую высоту камеры, например:

    viewer.camera.setView({
        destination : Cesium.Cartesian3.fromDegrees(
            longitude,
            latitude,
            Cesium.Ellipsoid.WGS84.cartesianToCartographic(viewer.camera.position).height
        )
    });
person danwild    schedule 18.11.2015