В этом примере показано, как вычислить и визуализировать видимость по линии визирования самолета из наземного местоположения по местности. Во-первых, импортировать данные местности для региона и применить их к 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
Добавление пользовательских данных с файлом 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.
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")
addCustomTerrain | campos | geoglobe | geoplot3 | los2 | readgeoraster