camheight

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

Описание

Установите высоту и режим

пример

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

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

пример

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

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

пример

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 a GeographicAxes объект.

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

Этот код определяет локальную функцию, вызываемую heightToZoomLevel который аппроксимирует уровень масштаба z для GeographicAxes объект, использующий высоту камеры h и широта lat a 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®.