Как масштабировать/перемещать камеру для отображения многоугольника в Cesium.js (подогнать область просмотра к границам многоугольника)

Хорошо, может быть, я слепой, потому что это явно не расширенная функциональность.. но я смотрю на Документы камеры для Cesium.js, и я не могу найти, как просто масштабировать/перемещать вид, чтобы показать многоугольник?

Я могу расположить камеру, чтобы показать полигон, используя средние значения широты и долготы, например:

viewer.camera.setView({
    position : Cesium.Cartesian3.fromDegrees(lonMean, latMean, 45000.0)
});

Но это вздор; Я не понимаю масштаб...Я хочу, чтобы масштаб/область просмотра были скорректированы в соответствии с многоугольником.

Может ли кто-нибудь указать, что я должен упускать из виду ...


person danwild    schedule 15.04.2015    source источник


Ответы (2)


Предполагая, что у вас есть полигон, определенный в Entity API, вы можете просто вызвать viewer.zoomTo(entity) или viewer.flyTo(entity). Это работает с любым типом визуализации объектов, а не только с полигонами, и обсуждается в Cesium. Руководство по визуализации пространственных данных.

person Matthew Amato    schedule 15.04.2015
comment
Идеальный! Хотя я чувствую, что документы являются немного расплывчатыми в этом... посмотрите на функцию flyTo(), нет ссылки на принятие параметра Entity: / cesiumjs.org/Cesium/Build/Documentation/Camera.html#flyTo - person danwild; 16.04.2015
comment
Это потому, что функция Camera.flyTo не принимает параметр объекта. Эта функция доступна только в средстве просмотра, которое является объектом более высокого уровня. Низкоуровневая камера ничего не знает о сущностях. Очевидно, что у нашего документа есть много возможностей для улучшения, я просто хотел уточнить это для вас. - person Matthew Amato; 20.04.2015
comment
Упс, да, это полностью моя оплошность; не документы - еще раз спасибо. - person danwild; 21.04.2015

Взгляните на демонстрацию камеры Sandcastle. Раскройте раскрывающийся список «Параметры камеры» и выберите «Перелететь к прямоугольнику» или «Просмотреть прямоугольник». Камера будет летать или привязываться к прямоугольнику, а редактор кода показывает, как это делается. Взгляните и на другие демо-версии Sandcastle, они содержат множество примеров кода для обычных действий в Cesium.

Вот код FlyTo:

var west = -90.0;
var south = 38.0;
var east = -87.0;
var north = 40.0;
var rectangle = Cesium.Rectangle.fromDegrees(west, south, east, north);

viewer.camera.flyTo({
    destination : rectangle
});
person emackey    schedule 15.04.2015
comment
Извините, интересует многоугольник, а не прямоугольник. - person danwild; 16.04.2015
comment
Да, это как mapbox.fitBounds. Твердый. - person frozenOne; 04.11.2020