Пересечение двух четырёхугольников широты и долготы
[latlim, lonlim] = intersectgeoquad(latlim1, lonlim1,
latlim2, lonlim2)
[latlim, lonlim] = intersectgeoquad(latlim1, lonlim1,
latlim2, lonlim2)
вычисляет пересечение четырехугольника, заданное пределами широты и долготы latlim1
и lonlim1
, с четырехугольником, заданным пределами широты и долготы latlim2
и lonlim2
. latlim1
и latlim2
являются двухэлементными векторами вида [southern-limit northern-limit]
. Точно так же lonlim1
и lonlim2
являются двухэлементными векторами вида [western-limit eastern-limit]
. Все входные и выходные углы указаны в единицах степеней. Результаты пересечения приведены в выходе массивах latlim
и lonlim
. Учитывая произвольную пару входа четырёхугольников, существует три возможных результата:
Четырехугольники не пересекаются. В этом случае оба latlim
и lonlim
являются пустыми массивами.
Перекресток состоит из одного четырехугольника. В этом случае latlim
(например latlim1
и latlim2
) - двухэлементный вектор, имеющий вид [southern-limit northern-limit]
, где southern-limit
и northern-limit
представляют скалярные значения. lonlim
(например lonlim1
и lonlim2
), является двухэлементным вектором, который имеет вид [western-limit eastern-limit]
, с парой скалярных пределов.
Перекресток состоит из пары четырёхугольников. Это может произойти, когда долготы обернуты таким образом, что восточный конец одного четырехугольника перекрывает западный конец другого и наоборот. Для примера, если lonlim1 = [-90 90]
и lonlim2 = [45 -45]
, существует два интервала перекрытия: [-90 -45]
и [45 90]
. Эти пределы возвращаются в lonlim
отдельными строками, образуя массив 2 на 2. В нашем примере (принимая, что пределы широты перекрываются) lonlim
равен бы [-90 -45; 45 90]
. У него все еще есть форма [western-limit eastern-limit]
, но western-limit
и eastern-limit
являются 2 на 1, а не скалярными. Два выходных четырехугольника имеют одинаковые пределы широты, но они реплицированы так, что latlim
также является 2 на 2.
Чтобы продолжить пример, если latlim1 = [0 30]
и latlim2 = [20 50]
, latlim
равен [20 30; 20 30]
. Форма все еще [southern-limit northern-limit]
, но в данном случае southern-limit
и northern-limit
2 на 1.
Неинтерсекционные четырехугольники:
[latlim, lonlim] = intersectgeoquad( ... [-40 -60], [-180 180], [40 60], [-180 180]) latlim = [] lonlim = []
Перекресток является одним четырехугольником:
[latlim, lonlim] = intersectgeoquad( ... [-40 60], [-120 45], [-60 40], [160 -75]) latlim = -40 40 lonlim = -120 -75
Пересечение - это пара четырёхугольников:
[latlim, lonlim] = intersectgeoquad( ... [-30 90],[-10 -170],[-90 30],[170 10]) latlim = -30 30 -30 30 lonlim = -10 10 170 -170
Входы и выход полностью окружают планету:
[latlim, lonlim] = intersectgeoquad( ... [-30 90],[-180 180],[-90 30],[0 360]) latlim = -30 30 lonlim = -180 180
Найдите и отобразите пересечение ограничивающих рамок смежных состояний США:
usamap({'Minnesota','Wisconsin'}) S = shaperead('usastatehi','UseGeoCoords',true,'Selector',... {@(name) any(strcmp(name,{'Minnesota','Wisconsin'})), 'Name'}); geoshow(S, 'FaceColor', 'y') textm([S.LabelLat], [S.LabelLon], {S.Name},... 'HorizontalAlignment', 'center') latlimMN = S(1).BoundingBox(:,2)' latlimMN = 43.4995 49.3844 lonlimMN = S(1).BoundingBox(:,1)' lonlimMN = -97.2385 -89.5612 latlimWI = S(2).BoundingBox(:,2)' latlimWI = 42.4918 47.0773 lonlimWI = S(2).BoundingBox(:,1)' lonlimWI = -92.8892 -86.8059 [latlim lonlim] = ... intersectgeoquad(latlimMN, lonlimMN, latlimWI, lonlimWI) latlim = 43.4995 47.0773 lonlim = -92.8892 -89.5612 geoshow(latlim([1 2 2 1 1]), lonlim([1 1 2 2 1]), ... 'DisplayType','polygon','FaceColor','m')
latlim1
и latlim2
обычно следует указывать в порядке увеличения числового значения. Никакая ошибка не возникнет, если, например, latlim1(2) < latlim1(1)
, но выходы будут пустыми массивами.
Никакие такие ограничения не применяются к lonlim1
и lonlim2
. Первый элемент всегда интерпретируется как западный предел, даже если он превышает второй элемент (восточный предел). Кроме того, intersectgeoquad
правильно обрабатывает любое соглашение о обертывании долготы, которое могло быть применено к lonlim1
и lonlim2
.
С точки зрения выхода, intersectgeoquad
обертывает lonlim
так, что все элементы попадают в закрытый интервал [-180 180]
. Это означает, что если (один из) выходного четырёхугольника (ов) пересекает 180 ° меридиан, его западный предел превышает его восточный предел. Результат был бы таким, что
lonlim(2) < lonlim(1)
lonlim(k,2) < lonlim(k,1)
k
равен 1 или 2, если пересечение содержит пару четырехугольников.Если abs(diff(lonlim1))
или abs(diff(lonlim2))
равен 360
, его четырехугольник интерпретируется как широтная зона, которая полностью окружает планету, ограниченную только одной параллелью на юге и другой параллелью на севере. Если два таких четырёхугольника пересекаются, lonlim
установлено в [-180 180]
.
Если вы хотите отобразить географические четырёхугольники, сгенерированные этой функцией или любыми другими, которые имеют более чем одна или две степени в длину, они могут не очень хорошо следовать изогнутым меридианам и параллелям. Степень отправления зависит от степени четырехугольника, проекции карты и шкалы карты. В таких случаях можно интерполировать промежуточные вершины вдоль ребер четырёхугольника с outlinegeoquad
функция.