Визуализируйте угол обзора самолета по ландшафту

В этом примере показано, как вычислить и визуализировать видимость угла обзора самолета от наземного местоположения по ландшафту. Во-первых, импортируйте данные о ландшафте для области и примените их к 3-D географическому земному шару. Затем выполните анализ видимости "точка-точка" от наземного местоположения до симулированного угла тангажа и отобразите результаты на 3-D географическом земном шаре. Наконец, выполните анализ видимости точки к области от наземного местоположения, соответствующего самолету, летящему на постоянной высоте, и отобразите результаты на 2D географические оси.

Используйте анализ угла обзора для сценариев класса "земля-воздух", где свободная видимость важна, такой что касается радарного наблюдения, коммуникаций и планирования пути UAV. Этот пример применяет анализ к радарному наблюдению для аэропорта.

Импортируйте данные о ландшафте

Задайте файл ландшафта DTED-формата, чтобы использовать для анализа данных и 3-D визуализации. Файл ландшафта был загружен с "SRTM Пусто Заполненный" набор данных, доступный от Геологической службы США (USGS).

dtedfile = "n39_w106_3arc_v2.dt1";
attribution = "SRTM 3 arc-second resolution. Data available from the U.S. Geological Survey.";

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

[Zterrain,Rterrain] = readgeoraster(dtedfile,"OutputType","double");

Просмотрите географические пределы и демонстрационное разрешение данных о ландшафте путем доступа к свойствам географического объекта растровой привязки. Пределы для файла соответствуют области вокруг Булдера, Колорадо, США, и разрешение соответствует формату уровня 1 DTED, который имеет демонстрационное разрешение 3 секунд дуги, или приблизительно 90 метров.

latlim = Rterrain.LatitudeLimits;
lonlim = Rterrain.LongitudeLimits;
latspc = Rterrain.SampleSpacingInLatitude;
lonspc = Rterrain.SampleSpacingInLongitude;
disp("Latitude limits of terrain: " + mat2str(latlim) + newline + ...
    "Longitude limits of terrain: " + mat2str(lonlim) + newline + ...
    "Terrain resolution in latitude: " + latspc*3600 + " arc seconds" + newline + ...
    "Terrain resolution in longitude: " + lonspc*3600 + " arc seconds")
Latitude limits of terrain: [39 40]
Longitude limits of terrain: [-106 -105]
Terrain resolution in latitude: 3 arc seconds
Terrain resolution in longitude: 3 arc seconds

Визуализируйте угол обзора траектории самолета на 3-D карте

Создайте географический земной шар с пользовательским ландшафтом

Добавьте пользовательские данные с файлом DTED для использования с 3-D визуализацией.

addCustomTerrain("southboulder",dtedfile,"Attribution",attribution)

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

fig = uifigure;
g = geoglobe(fig,"Terrain","southboulder");
hold(g,"on")

Просмотрите радарное наземное местоположение

Задайте радарное наземное местоположение в Горе Рокки Столичный Аэропорт. Радар смонтирован на башне 10 метров над землей. Радарная высота является суммой наземного вертикального изменения и радарной высоты башни, на которую ссылаются к среднему уровню моря.

rdrlat = 39.913756;
rdrlon = -105.118062;
rdrtowerht = 10;
rdralt = 1717 + rdrtowerht;

Постройте радарное местоположение на географическом земном шаре.

geoplot3(g,rdrlat,rdrlon,rdralt,"co", ...
    "LineWidth",6, ...
    "MarkerSize",1)

Симулируйте траекторию самолета

Симулируйте траекторию самолета, кружащегося по горам.

Задайте центральное местоположение кружащегося самолета.

tlat0 = 39.80384;
tlon0 = -105.49916;
tht0 = 3000;

Задайте траекторию waypoints для самолета с помощью Декартовых координат "восточного севера" (ENU). Задайте кривую с радиусом 5 км (5 000 м) и вертикальным смещением 1 км (1 000 м) более чем 1,5 оборота. Затем преобразуйте координаты ENU в геодезические координаты, на которые ссылаются к эллипсоиду WGS84.

azs = 1:540;
r = 5000;
[X,Y] = pol2cart(deg2rad(azs),r);
Z = linspace(0,1000,numel(azs));
wgs84 = wgs84Ellipsoid;
[tlat,tlon,tht] = enu2geodetic(X,Y,Z,tlat0,tlon0,tht0,wgs84);

Просмотрите траекторию самолета по ландшафту

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

traj = geoplot3(g,tlat,tlon,tht,"y", ...
    "HeightReference","ellipsoid", ...
    "LineWidth",3);

Просмотрите 3-D ландшафт и радарное местоположение издалека путем изменения положения камеры и углов поворота.

campos(g,39.77114,-105.62662,6670)
camheading(g,70)
campitch(g,-12)

Вычислите видимость угла обзора с траекторией самолета

Вычислите видимость угла обзора с los2 функционируйте и данные DTED.

los2 функционируйте поддерживает любую ортометрическую высоту (высота над средним уровнем моря) или высота над уровнем земли. Преобразуйте высоты траектории самолета от эллипсоидальной высоты до ортометрической высоты. Затем вычислите угол обзора от радарного местоположения аэропорта до каждой траектории самолета waypoint и преобразуйте результаты в логический массив.

numwaypts = numel(tlat);
isvis = zeros(1,numwaypts);
talt = tht - egm96geoid(tlat,tlon);
for k = 1:numwaypts
    isvis(k) = los2(Zterrain,Rterrain,rdrlat,rdrlon,tlat(k),tlon(k),rdralt,talt(k),"MSL","MSL");
end
isvis = logical(isvis);

Обратите внимание на то, что los2 вычисляет видимость угла обзора, принимающую, что на данные ссылаются к сферической Земле, тогда как на данные на самом деле ссылаются к эллипсоиду WGS84, и в результате могут быть незначительные несоответствия. Вычисление угла обзора также соответствует оптическому углу обзора и не составляет преломление через атмосферу.

Визуализируйте видимость угла обзора по ландшафту

Постройте видимость угла обзора. Используйте зеленые маркеры, где самолет отображается из аэропорта и пурпурных маркеров, где это не отображается.

delete(traj)
geoplot3(g,tlat(isvis),tlon(isvis),tht(isvis),"og", ...
    "HeightReference","ellipsoid", ...
    "LineWidth",2, ...
    "MarkerSize",1)
geoplot3(g,tlat(~isvis),tlon(~isvis),tht(~isvis),"om", ...
    "HeightReference","ellipsoid", ...
    "LineWidth",2, ...
    "MarkerSize",1)

Просмотрите график угла обзора с точки зрения аэропорта. Получите геодезические координаты положения, которое является в 900 метрах к востоку, в 200 метрах к северу, и 100 метров от радарного местоположения. Затем установите положение камеры и углы поворота. Зеленые маркеры появляются в поле зрения, но пурпурные маркеры или полностью или частично затруднены ландшафтом.

rdrht = rdralt + egm96geoid(rdrlat,rdrlon);
[camlat,camlon,camht] = enu2geodetic(900,200,100,rdrlat,rdrlon,rdrht,wgs84);
campos(g,camlat,camlon,camht)
camheading(g,-110)
campitch(g,0)

Визуализируйте контуры видимости угла обзора самолета на 2D карте

Предыдущие разделы выполнили анализ угла обзора "точка-точка" и визуализацию от радарного местоположения до траектории самолета. Теперь выполните анализ угла обзора точки к области и визуализацию от того же радарного местоположения по области ландшафта. Визуализация отображает ребро видимости для самолета, летящего на постоянной высоте.

Постройте радарные пределы местоположения и ландшафта на 2D карте

Постройте радарное местоположение на новом рисунке с топографической 2D картой.

figure
geoplot(rdrlat,rdrlon,"co", ...
    "LineWidth",6, ...
    "MarkerSize",3, ...
    "DisplayName","Radar location")
hold on
geobasemap topographic
gx = gca;
gx.InnerPosition = gx.OuterPosition;

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

latmin = latlim(1);
latmax = latlim(2);
lonmin = lonlim(1);
lonmax = lonlim(2);
geoplot([latmin latmin latmax latmax latmin],[lonmin lonmax lonmax lonmin lonmin], ...
    "LineWidth",1, ...
    "Color","k", ...
    "DisplayName","Terrain limits")

Отобразите легенду в северо-западном углу.

legend("Location","northwest")

Постройте контуры видимости для самолета, летящего на постоянной высоте

Задайте три высоты над средним уровнем моря для самолета. Для каждой высоты:

  • Вычислите viewshed использование радарного местоположения как наблюдатель. viewshed задает область, которая имеет видимость угла обзора.

  • Найдите ребро видимости самолета путем вычисления контуров из viewshed данных.

  • Удалите маленькие сегменты контура.

  • Постройте контуры на географических осях.

tgtalts = [3000 4000 5000];

minVertices = 10;
cfig = figure("Visible","off"); % Suppress contour plot using invisible figure
cax = axes("Parent",cfig);
for tgtalt = tgtalts
    vis = viewshed(Zterrain,Rterrain,rdrlat,rdrlon,rdralt,tgtalt,"MSL","MSL");
    
    C = contourm(vis,Rterrain,"LevelList",1,"Parent",cax);
    clat = C(2,:);
    clon = C(1,:);
    
    clats = [];
    clons = []; 
    k = 1;   
    while k < size(C,2)
        numVertices = clat(k);
        if numVertices > minVertices % Do not plot small segments 
            clats = [clats clat(k+1:k+numVertices) NaN]; %#ok<AGROW> 
            clons = [clons clon(k+1:k+numVertices) NaN]; %#ok<AGROW> 
        end
        k = k + numVertices + 1;
    end
    
    geoplot(gx,clats,clons,"LineWidth",2, ...
        "DisplayName", "Aircraft: " + string(tgtalt) + " m");
end

Контуры появляются, в основном, на запад радарного местоположения по горам. Контуры не появляются в других направлениях, потому что видимость не ограничивается ландшафтом в тех направлениях в пределах данных о ландшафте.

Если радар ограничивается видимостью угла обзора, то контуры соответствуют радарным зонам обслуживания для различной высоты, где самый близкий контур к радару соответствует радарному покрытию для самолета, летящего на уровне 3 000 метров, и самый далекий контур соответствует радарному покрытию для самолета, летящего на уровне 5 000 метров.

Как с los2, viewshed функция вычисляет видимость угла обзора, принимающую, что на данные ссылаются к сферической Земле, тогда как на данные на самом деле ссылаются к эллипсоиду WGS84, и в результате могут быть незначительные несоответствия. Вычисление угла обзора также соответствует оптическому углу обзора и не составляет преломление через атмосферу.

Очистка

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

if isvalid(fig)
    close(fig)
end
removeCustomTerrain("southboulder")

Смотрите также

Функции

Объекты

Похожие темы