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 сетки видимости содержит 1 s в поверхностных районах, видимых от местоположения наблюдателя и 0 s, где угол обзора затенен ландшафтом. 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)

Вычислите площадь поверхности, видимую радаром от самолета, летящего на 3 000 метров над Желтым морем. Примите, что распространение радиоволны в атмосфере может быть смоделировано как прямые линии на 4/3 Земле радиуса. Этот пример также вычисляет область, видимую к плоскости выше его на уровне 5 000 метров.

Загрузите данные из MAT-файла, содержащего информацию о корейском полуострове, вычислите viewshed и отобразите его.

load korea
map(map<0) = -1;
figure
worldmap(map,refvec)
setm(gca,'geoid',[1 0])
da = daspect;
pba = pbaspect;
da(3) = 7.5*pba(3)/da(3);
daspect(da);
demcmap(map)
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( ...
   map,refvec,lat,lon,altobs,alttarg, ...
   'MSL','AGL',Re,4/3*Re);
meshm(vmap,vmapl,size(map),map)

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

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

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

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

Советы

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

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

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