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 вычисления. Высоты, повышения и радиусы должны быть одинаковыми по модулям.

Примеры

свернуть все

Вычислите видимость для точки на карте peaks. Добавьте подробную информацию для вычисления линии визирования между двумя точками от 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