los2

Видимость линии визирования между двумя точками в местности

Синтаксис

vis = los2(Z,R,lat1,lon1,lat2,lon2)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt,alt2opt)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt, ...
  alt2opt,actualradius)
vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt, ...
  alt2opt,actualradius,effectiveradius)
[vis,visprofile,dist,H,lattrk,lontrk] = los2(...)
los2(...)

Описание

los2 вычисляет взаимную видимость между двумя точками на отображаемой цифровой карте повышения. los2 использует текущий объект, если это обычная сетка данных или первая регулярная сетка данных, найденная на текущей системе координат. Сетка zdata используется для профиля. Данные о цвете используются при отсутствии данных в z. Эти две точки выбираются щелчком мыши на карте. Результат отображается на новом рисунке. Маркеры указывают видимые и затененные точки вдоль профиля. Профиль показан в декартовой системе координат с источником в местоположении наблюдателя. Отображаемая z координаты учитывают повышение местности и кривизну тела.

vis = los2(Z,R,lat1,lon1,lat2,lon2) вычисляет взаимную видимость между парами точек на цифровой карте повышения. Повышения предоставляются как регулярная сетка данных Z содержащих повышения в единицах измерения. Две точки предусмотрены как векторы широт и долгот в единицах степеней. Получившаяся логическая переменная vis равен единице, когда две точки видны друг другу, и нулю, когда линия зрения заслоняется местностью. Если какой-либо из входных параметров пуст, los2 пытается собрать данные из текущей системы координат. С одним или несколькими выходными аргументами никакие рисунки не создаются и возвращаются только данные.

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. Все углы указаны в единицах степеней.

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1) размещает первую точку на заданной высоте в метрах над поверхностью (на башне, для образца). Это эквивалентно постановке точки на башню. Если опущена, точка 1 принимается на поверхности. alt1 может быть либо скаляром, либо вектором с той же длиной, что и lat1, lon1, lat2, и lon2.

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2) расположения обеих точек на заданных высотах в метрах над поверхностью. alt2 может быть либо скаляром, либо вектором с той же длиной, что и lat1, lon1, lat2, и lon2. Если alt2 опущен, точка 2 принята на поверхности.

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt) управляет интерпретацией alt1 как относительная высота (alt1opt равен 'AGL', по умолчанию) или абсолютная высота (alt1opt равен 'MSL'). Если опция высоты 'AGL', alt1 интерпретируется как высота точки 1 в метрах над местностью («над уровнем земли»). Если alt1opt является 'MSL', alt1 интерпретируется как высота над нулями («средний уровень моря»).

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt,alt2opt) управляет интерпретацией ALT2.

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt, ...
  alt2opt,actualradius)
выполняет вычисление видимости сферы с заданным радиусом. В случае опущения принимается радиус земли в метрах. Высоты, повышения и радиус должны быть одинаковыми по модулям. Эта форма вызова наиболее полезна для расчетов на телах, отличных от Земли.

vis = los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt2,alt1opt, ...
  alt2opt,actualradius,effectiveradius)
принимает больший радиус для распространения линии визирования. Это может объяснить кривизну пути сигнала из-за преломления в атмосфере. Например, распространение радио в атмосфере обычно рассматривается как распространение прямой линии на сфере с радиусом земли 4/3. В этом случае последние два аргумента будут R_e и 4/3*R_e, где R_e - радиус Земли. Использование Inf как эффективный радиус для вычисления видимости плоской земли. Высоты, повышения и радиусы должны быть одинаковыми по модулям.

[vis,visprofile,dist,H,lattrk,lontrk] = los2(...), для скалярных входов (lat1, lon1, и т.д.), возвращает векторы точек вдоль пути между двумя точками. visprofile - логический вектор, содержащий true (logical(1)) где промежуточные точки видны и ложны (logical(0)) в противном случае. dist - расстояние вдоль пути (в метрах или модулях радиуса). H содержит профиль местности относительно вертикальной данной величины вдоль пути. lattrk и lontrk являются широтами и долготами точек вдоль пути. Для векторных входов los2 возвращает visprofile, dist, H, lattrk, и lontrk как массивы ячеек, с одной камерой на элемент lat1,lon1, и т.д.

los2(...)без выходные аргументы отображает профиль видимости между двумя точками на новом рисунке.

Примеры

свернуть все

Определите линию зрения для двух точек. Отобразите профиль видимости в 2-D и 3-D.

Импортируйте данные о местности для области вокруг Саут-Боулдер-Пик в Колорадо. Подготовьте данные к анализу путем определения типа выхода следующим 'double'.

[Z,R] = readgeoraster("n39_w106_3arc_v2.dt1","OutputType","double");

Укажите координаты пика Саут-Боулдер и близлежащей точки. Определите, видна ли ближайшая точка из положения на 100 метров выше пика, присвоив результат los2 в переменную.

latPeak = 39.95384;
lonPeak = -105.29916;
latNearby = 39.96955;
lonNearby = -105.29867;
vis = los2(Z,R,latPeak,lonPeak,latNearby,lonNearby,100)
vis = logical
   0

Значение vis является 0, что означает, что точка не видна с пика.

Чтобы отобразить профиль видимости в 2-D, вызовите los2 без выходного аргумента.

los2(Z,R,latPeak,lonPeak,latNearby,lonNearby,100)

Чтобы отобразить профиль видимости в 3-D, верните информацию о видимости точек между заданными координатами. Выходные выходы lattrk и lontrk содержать координаты точек. Область выхода visprofile содержит логические значения, указывающие, видны ли точки.

[~,visprofile,~,~,lattrk,lontrk] = los2(Z,R,latPeak,lonPeak,latNearby,lonNearby,100);

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

addCustomTerrain("southboulder","n39_w106_3arc_v2.dt1")
uif = uifigure;
g = geoglobe(uif,"Terrain","southboulder");

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

hold(g,"on")
geoplot3(g,[latPeak latNearby],[lonPeak lonNearby],[100 0],"m","LineWidth",2, ...
    "HeightReference","terrain")

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

geoplot3(g,lattrk(~visprofile),lontrk(~visprofile),10, ...
    "mo","MarkerSize",2,"LineWidth",2,"HeightReference","terrain")
geoplot3(g,lattrk(visprofile),lontrk(visprofile),10,"go", ...
    "MarkerSize",2,"LineWidth",2,"HeightReference","terrain")

Отрегулируйте вид путем установки положения камеры, тангажа, крена и курса.

campos(g,39.9519,-105.3039,2.9424e+03)
campitch(g,-31.7850)
camroll(g,0.3603)
camheading(g,36.5618)

Закройте рисунок, содержащую географический глобус, и удалите пользовательский рельеф.

close(uif)
removeCustomTerrain("southboulder")

Найдите угол возвышения точки 90 степеней от наблюдателя, принимая, что наблюдатель и цель находятся на 1000 км выше Земли.

lat1 = 0; 
lon1 = 0; 
alt1 = 1000*1000;
lat2 = 0; 
lon2 = 90; 
alt2 = 1000*1000;
[az, elev, r] = geodetic2aer(lat2,lon2,alt2,lat1,lon1,alt1,referenceEllipsoid('grs 80'))
az = 90
elev = -45
r = 1.0434e+07

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

Z = zeros(181,361);
R = georefpostings([-90 90],[-180 180], size(Z))
R = 
  GeographicPostingsReference with properties:

              LatitudeLimits: [-90 90]
             LongitudeLimits: [-180 180]
                  RasterSize: [181 361]
        RasterInterpretation: 'postings'
            ColumnsStartFrom: 'south'
               RowsStartFrom: 'west'
     SampleSpacingInLatitude: 1
    SampleSpacingInLongitude: 1
      RasterExtentInLatitude: 180
     RasterExtentInLongitude: 360
            XIntrinsicLimits: [1 361]
            YIntrinsicLimits: [1 181]
        CoordinateSystemType: 'geographic'
               GeographicCRS: []
                   AngleUnit: 'degree'


los2(Z,R,lat1,lon1,lat2,lon2,alt1,alt1); 

Figure contains an axes. The axes contains 5 objects of type line. These objects represent Terrain, Line of Sight, Visible, Obscured, Observer.

См. также

|

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