exponenta event banner

camheight

Установка или запрос высоты камеры для географического глобуса

Описание

Задать высоту и режим

пример

camheight(g,height) задает эллипсоидальную высоту камеры для указанного географического шара.

camheight(g,'auto') устанавливает высоту камеры в автоматический режим, позволяя географическому глобусу определять высоту камеры на основе выводимых на печать данных. При создании географического глобуса по умолчанию используется автоматический режим. При изменении высоты камеры с помощью мыши режим переключается в автоматический режим.

пример

camheight(g,'manual') устанавливает высоту камеры в ручной режим, указывая, что географический глобус сохраняет высоту камеры при изменении выводимых на печать данных. При изменении высоты камеры с помощью camheight затем режим переключается в ручной режим.

Высота запроса

пример

heightOut = camheight(g) возвращает эллипсоидальную высоту камеры.

heightOut = camheight(___) задает высоту или режим, а затем возвращает эллипсоидальную высоту камеры. Можно вернуть высоту камеры, используя любую комбинацию входных аргументов из предыдущих синтаксисов.

Примеры

свернуть все

Создайте географический глобус. Задайте широту и долготу Эйфелевой башни и задайте высоту 700 метров над опорным эллипсоидом WGS84. Затем переместите камеру с помощью campos функция.

uif = uifigure;
g = geoglobe(uif);

lat = 48.8584;
lon = 2.2945;
h = 700;
campos(g,lat,lon,h)

Изменение только высоты камеры с помощью camheight функция. Увеличьте высоту камеры до 1500 метров над опорным эллипсоидом WGS84.

camheight(g,1500)

Создайте географический глобус. Установите камеру над горой Вашингтон, указав широту, долготу и эллипсоидальную высоту.

uif = uifigure;
g = geoglobe(uif);

height0 = 2500;
campos(g,44.2706,-71.3025,height0)

Анимация вида путем инкрементного изменения высоты камеры. По мере увеличения высоты камеры масштаб изображения уменьшается.

for height = 2500:50:5000
    camheight(g,height)
    drawnow
end

Получи высоту камеры. Эта информация используется для управления видом другого географического шара или для автоматизации навигации.

Создайте географический глобус. Увеличьте изображение области вокруг Испании с помощью мыши или жестов.

uif = uifigure;
g = geoglobe(uif);

Satellite view of Spain

Выполните запрос высоты камеры и назначьте ее переменной.

outHeight = camheight(g)
outHeight =

   1.8803e+06

Это значение используется для управления высотой камеры для другого географического шара. Например, создайте новый географический глобус и программно задайте высоту камеры.

uif2 = uifigure;
g2 = geoglobe(uif2);
camheight(g2,outHeight)

Сохраните положение, курс, тангаж и углы крена камеры, установив режимы камеры в ручной режим. Если режим камеры не установлен в ручной режим, то при печати новых данных вид камеры сбрасывается.

Импорт образца трассы вдоль дорог в Массачусетсе с помощью gpxread функция. Создайте географический глобус с дорожной картой и без данных о местности. Сохранение параметров базовой карты и рельефа с помощью hold функция. Затем с помощью мыши перейдите в область недалеко от Восточного Массачусетса.

track = gpxread('sample_tracks.gpx','Index',2);
lat = track.Latitude;
lon = track.Longitude;
height = track.Elevation;

uif = uifigure;
g = geoglobe(uif,'Basemap','streets','Terrain','none');
hold(g,'on')

Map of an area around Eastern Massachusetts with labeled cities and roads

Установите режимы камеры для ручной печати и печати данных. Обратите внимание, что положение камеры не изменяется.

campos(g,'manual')
camheight(g,'manual')
camheading(g,'manual')
campitch(g,'manual')
camroll(g,'manual')
geoplot3(g,lat,lon,height,'LineWidth',3)

The same map with a blue line plotted along several roads

Стратегии, используемые для программного увеличения и уменьшения GeographicGlobe и GeographicAxes объекты различны. Для GeographicGlobe , вы указываете высоту камеры с помощью camheight функция. Для GeographicAxes , вы указываете уровень зумирования с помощью ZoomLevel или укажите пределы широты и долготы с помощью geolimits функция. Создать GeographicGlobe и GeographicAxes объекты с аналогичными масштабами карты, приблизительной высотой камеры и уровнем зумирования с помощью heightToZoomLevel и zoomLevelToHeight локальные функции (определены здесь).

Можно проверить поведение zoomLevelToHeight локальная функция путем отображения GeographicAxes и GeographicGlobe объекты, использующие сопоставимые уровни увеличения.

Укажите широту и долготу Сиднейского оперного театра. Создайте географические оси с базовой картой, центром карты и уровнем зумирования, который позволяет четко видеть здание.

lat = -33.8572;
lon = 151.2150;
z = 17;
gx = geoaxes('Basemap','satellite','MapCenter',[lat lon],'ZoomLevel',z);

Создайте географический глобус. Расположите камеру над Сиднейским оперным театром с помощью campos функция.

uif = uifigure;
g = geoglobe(uif);
campos(g,lat,lon)

Рассчитайте приблизительную высоту камеры от уровня зумирования с помощью zoomLevelToHeight локальная функция. Затем установите высоту камеры с помощью camheight функция. Обратите внимание, что географические оси и географические глобусы сопоставимы.

h = zoomLevelToHeight(z,lat);
camheight(g,h)

Проверка поведения heightToZoomLevel вычислите приблизительный уровень масштабирования по высоте камеры.

z2 = heightToZoomLevel(h,lat)
z2 = 17

Обратите внимание, что z и z2 равны.

Этот код определяет локальную функцию с именем zoomLevelToHeight аппроксимирует высоту камеры h для GeographicGlobe объект с использованием уровня зумирования z и широта центра карты lat из GeographicAxes объект.

function h = zoomLevelToHeight(z,lat)
    earthCircumference = 2*pi*6378137;
    h = (earthCircumference*cosd(lat)) / 2^(z-1);
end

Этот код определяет локальную функцию с именем heightToZoomLevel аппроксимирует уровень зумирования z для GeographicAxes объект с использованием высоты камеры h и широта lat из GeographicGlobe объект.

function z = heightToZoomLevel(h,lat)
    earthCircumference = 2*pi*6378137;
    z = log2((earthCircumference*cosd(lat)) / h) + 1;
    z = max(0,z);
    z = min(19,z);
end

Входные аргументы

свернуть все

Географический глобус, указанный как GeographicGlobe объект. [1 ]

Эллипсоидальная высота камеры, заданная как числовой скаляр в метрах. Объекты географического глобуса используют WGS84 опорный эллипсоид. Дополнительные сведения об эллипсоидальной высоте см. в разделе Поиск эллипсоидальной высоты по ортометрической высоте.

Если задать высоту таким образом, чтобы камера находилась на одном уровне с рельефом местности или ниже него, то camheight устанавливает высоту на один метр над рельефом местности.

Представлен в R2020b

[1] Выравнивание границ и меток областей является представлением функции, предоставляемой поставщиками данных, и не подразумевает одобрения MathWorks ®.