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 функция. Увеличьте высоту камеры до на 1 500 метров выше ссылочного эллипсоида 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 object.[1]

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

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

Введенный в R2020b

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