exponenta event banner

Визуализация линии визирования самолета над местностью

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

Использовать анализ линии визирования для сценариев «земля-воздух», где важна беспрепятственная видимость, например, для радиолокационного наблюдения, связи и планирования траектории БПЛА. В этом примере анализ применяется для радиолокационного наблюдения за аэропортом.

Импорт данных рельефа

Укажите файл рельефа в формате DTED, который будет использоваться для анализа данных и визуализации 3-D. Файл местности был загружен из набора данных «SRTM Void Filled», доступного от Геологической службы США (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");

Просмотр географических пределов и разрешения образца данных рельефа путем доступа к свойствам объекта географической растровой ссылки. Пределы для файла соответствуют региону вокруг Боулдера, Колорадо, США, а разрешение соответствует формату DTED level-1, который имеет разрешение образца 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;

Определите точки траектории для самолета с использованием декартовых координат восток-север-вверх (RUS). Задайте кривую радиусом 5 км (5000 м) и вертикальным смещением 1 км (1000 м) на 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 функция поддерживает либо ортометрическую высоту (высоту над средним уровнем моря), либо высоту над уровнем земли. Преобразуйте высоты траектории самолета из эллипсоидальной высоты в ортометрическую высоту. Затем вычисляют линию визирования от местоположения РЛС аэропорта до каждого ППМ траектории самолета и преобразуют результаты в логическую матрицу.

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)

Визуализация контуров видимости линии визирования самолета на карте 2-D

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

Постройте график расположения радаров и границ местности на карте 2-D

Постройте график расположения РЛС на новой фигуре с топографической картой 2-D.

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")

График контуров видимости для летательных аппаратов, летающих на постоянной высоте

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

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

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

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

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

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

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

Если РЛС ограничена видимостью линии визирования, то контуры соответствуют областям охвата РЛС для изменения высоты, где ближайший к РЛС контур соответствует охвату РЛС для самолета, летящего на высоте 3000 метров, а самый дальний контур соответствует охвату РЛС для самолета, летящего на высоте 5000 метров.

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

Очистить

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

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

См. также

Функции

Объекты

Связанные темы