exponenta event banner

viewshed

Зоны, видимые из точки на сетке рельефа местности

Синтаксис

[vis,R] = viewshed(Z,R,lat1,lon1)
viewshed(Z,R,lat1,lon1,observerAltitude)
viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude)
viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption)
viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltidueOption,targetAltitudeOption)
viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption,targetAltitudeOption,actualRadius)
viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption,targetAltitudeOption, ...
  actualRadius,effectiveRadius)

Описание

[vis,R] = viewshed(Z,R,lat1,lon1) вычисляет области, видимые из точки на цифровой сетке отметок. Z - обычная сетка данных, содержащая отметки в единицах метра. Местоположение наблюдателя обеспечивается как скалярная широта и долгота в единицах градусов. Сетка видимости vis содержит 1s в местоположениях поверхности, видимых из местоположения наблюдателя, и 0s, где линия видимости скрыта рельефом местности. R может быть объектом географической растровой ссылки, ссылочным вектором или ссылочной матрицей.

Если R - объект географической растровой ссылки, RasterSize свойство должно быть совместимым с size(Z).

Если R является ссылочным вектором, он должен быть 1 на 3 с элементами:

[cells/degree northern_latitude_limit western_longitude_limit]

Если R является ссылочной матрицей, она должна быть 3 на 2 и преобразовывать индексы растровых строк и столбцов в географические координаты или из них в соответствии с:

[lon lat] = [row col 1] * R

Если R является ссылочной матрицей, она должна определять (без вращения, без перекоса) соотношение, в котором каждый столбец сетки данных падает вдоль меридиана, а каждая строка падает вдоль параллели. По умолчанию используется интерполяция ближайшего соседа. NaN возвращается для точек за пределами сетки или для которых lat или lon содержат NaN. Все углы в единицах градусов.

viewshed(Z,R,lat1,lon1,observerAltitude) размещает наблюдателя на заданной высоте в метрах над поверхностью. Это эквивалентно посадке наблюдателя на башню. Если этот параметр опущен, то предполагается, что наблюдатель находится на поверхности.

viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude) проверяет видимость целевых точек на заданном расстоянии над рельефом местности. Это эквивалентно размещению целевых точек на башнях, которые не препятствуют обзору. Если этот параметр опущен, предполагается, что целевые точки находятся на поверхности.

viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption)
определяет, находится ли наблюдатель на относительной или абсолютной высоте. Если observerAltitudeOption является 'AGL', то observerAltitude находится в метрах над уровнем земли. Если observerAltitudeOption является 'MSL', observerAltitude интерпретируется как высота выше нуля или средний уровень моря. Если опущено, 'AGL' предполагается.

viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltidueOption,targetAltitudeOption)
определяет, находятся ли точки цели на относительной или абсолютной высоте. Если опция высоты цели 'AGL', targetAltitude находится в метрах над уровнем земли. Если targetAltitudeOption является 'MSL', targetAltitude интерпретируется как высота выше нуля или средний уровень моря. Если опущено, 'AGL' предполагается.

viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption,targetAltitudeOption,actualRadius)
выполняет расчет видимости для сферы с заданным радиусом. Если этот параметр опущен, то принимается радиус земли в метрах. Высоты, отметки и радиус должны быть в одних и тех же единицах. Эта вызывающая форма наиболее полезна для вычислений на телах, отличных от Земли.

viewshed(Z,R,lat1,lon1,observerAltitude,targetAltitude, ...
  observerAltitudeOption,targetAltitudeOption, ...
  actualRadius,effectiveRadius)
предполагает больший радиус для распространения линии визирования. Это может учитывать кривизну сигнального пути из-за преломления в атмосфере. Например, распространение радио в атмосфере обычно рассматривается как распространение прямой на сфере с радиусом Земли 4/3. В этом случае последние два аргумента будут R_e и 4/3*R_e, где R_e - радиус земли. Использовать Inf для плоского заземления viewshed расчеты. Высоты, отметки и радиусы должны быть в одних и тех же единицах.

Примеры

свернуть все

Расчет видимости точки на карте пиков. Добавление подробной информации для расчета линии визирования между двумя точками из los2 .

Создайте карту пиков и постройте график видимости.

Z = 500*peaks(100);
refvec = [1000 0 0];
[lat1,lon1,lat2,lon2] = deal(-0.027,0.05,-0.093,0.042);
     
[visgrid,visleg] = viewshed(Z,refvec,lat1,lon1,100);
[vis,visprofile,dist,zi,lattrk,lontrk] ...
   = los2(Z,refvec,lat1,lon1,lat2,lon2,100);

axesm('globe','geoid',earthRadius('meters'))
meshm(visgrid,visleg,size(Z),Z); 
axis tight
camposm(-10,-10,1e6)
camupm(0,0)
colormap(flipud(summer(2))) 
brighten(0.75)
shading interp 
camlight
h = lcolorbar({'obscured','visible'});
h.Position = [.875 .45 .02 .1];

plot3m(lattrk([1;end]),lontrk([1; end]), ...
   zi([1; end])+[100; 0],'r','linewidth',2)
plotm(lattrk(~visprofile),lontrk(~visprofile), ...
   zi(~visprofile),'r.','markersize',10)
plotm(lattrk(visprofile),lontrk(visprofile), ...
   zi(visprofile),'g.','markersize',10)

Figure contains 2 axes. Axes 1 contains 4 objects of type surface, line. Axes 2 contains an object of type image.

Вычислите площадь поверхности видимой РЛС с самолета, пролетающего 3000 метров над Желтым морем. Предположим, что распространение радиоволн в атмосфере можно смоделировать как прямые линии на Земле с радиусом 4/3. В этом примере также вычисляется площадь, видимая для плоскости над ней на расстоянии 5000 метров.

Загрузите данные отметок и объект ссылки на географические ячейки для Корейского полуострова, рассчитайте видимое пространство и отобразите его.

load korea5c
korea5c(korea5c<0) = -1;
figure
worldmap(korea5c,korea5cR)
setm(gca,'geoid',[1 0])
da = daspect;
pba = pbaspect;
da(3) = 7.5*pba(3)/da(3);
daspect(da);
demcmap(korea5c)
camlight(90,5);
camlight(0,5);
lighting gouraud
material([0.25 0.8 0])
lat = 34.0931; lon = 125.6578; 
altobs = 3000; alttarg = 0;
plotm(lat,lon,'wo')
Re = earthRadius('meters');
[vmap,vmapl] = viewshed( ...
   korea5c,korea5cR,lat,lon,altobs,alttarg, ...
   'MSL','AGL',Re,4/3*Re);
meshm(vmap,vmapl,size(korea5c),korea5c)

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

caxis auto; colormap([1 0 0; 0 0 1])
lighting gouraud; 
axis off

Теперь рассчитайте площадь, в которой самолет РЛС, летящий на высоте 3000 метров, может иметь линию визирования к другим летательным аппаратам, летящим над ним на высоте 5000 метров. Обратите внимание, что площадь намного больше, но некоторые края области уменьшаются за счет затенения от Чеджу-До и гор на Корейском полуострове.

[vmap,vmapl] = viewshed(korea5c,korea5cR,lat,lon,3000,5000, ...
               'MSL','MSL',Re,4/3*Re);
clmo surface
meshm(vmap,vmapl,size(korea5c),korea5c)
lighting gouraud

Совет

Наблюдатель должен находиться в пределах широты-долготы сетки высот. Если наблюдатель находится за пределами сетки, информации для вычисления видовой области недостаточно. В этом случае viewshed выдает предупреждение и устанавливает все элементы vis до нуля.

См. также

Представлен до R2006a