exponenta event banner

Создание и отображение полигонов

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

A polygon with a hole. Arrows show the order of vertices.

Простой полигон

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

x1 = [0 3 4 1 0];
y1 = [0 1 3 2 0];

Отображение вершин в виде многоугольника с помощью mapshow функция путем указания 'DisplayType' как 'polygon'.

mapshow(x1,y1,'DisplayType','polygon')

Figure contains an axes. The axes contains an object of type patch.

Многоугольники с отверстиями или несколькими областями

Определение многоугольников с несколькими областями или отверстиями путем разделения границ на NaN значения. Перечислите вершины внешних границ в порядке по часовой стрелке и вершины внутренних границ в порядке против часовой стрелки.

x2 = [0 1 8 6 0 NaN 1 4 2 1 NaN 5 6 7 3 5];
y2 = [0 6 8 2 0 NaN 1 3 5 1 NaN 3 5 7 6 3];

Эти векторы определяют многоугольник с одной внешней границей и двумя внутренними границами. Границы разделяются с помощью NaN значения. Проверьте порядок вершин границ с помощью команды ispolycw функция. ispolycw функция возвращает 1, если вершины расположены в порядке по часовой стрелке.

ispolycw(x2,y2)
ans = 1x3 logical array

   1   0   0

Отображение многоугольника. Внутренние границы создают отверстия внутри многоугольника.

figure
mapshow(x2,y2,'DisplayType','polygon')

Figure contains an axes. The axes contains an object of type patch.

Теперь перечислите вершины многоугольника с двумя непересекающимися областями. В одном из регионов есть отверстие. Проверьте порядок вершин границ с помощью ispolycw.

x3 = [0 1 5 6 0 NaN 1 5 4 2 1 NaN 7 6 8 8 7];
y3 = [0 6 7 2 0 NaN 1 3 6 5 1 NaN 4 7 8 7 4];
ispolycw(x3,y3)
ans = 1x3 logical array

   1   0   1

Отображение многоугольника. Внешние границы создают две непересекающиеся области, а внутренняя граница создает отверстие.

figure
mapshow(x3,y3,'DisplayType','polygon')

Figure contains an axes. The axes contains an object of type patch.

Многоугольники с использованием географических координат

Как правило, географические координаты можно использовать при определении многоугольников над небольшими областями и при вызове таких функций, как ispolycw. Это верно, за исключением случаев, когда многоугольник оборачивает полюс или пересекает Антимеридиан.

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

states = shaperead('usastatehi','UseGeoCoords',true);
michigan = states(22);
lat = michigan.Lat;
lon = michigan.Lon;

Подсчитайте границы и проверьте порядок их вершин. Использовать ispolycw с географическими координатами перечислите вектор долготы в качестве первого аргумента и вектор широты в качестве второго аргумента. Выходной массив 1 на 6 означает, что имеется шесть границ. Каждый элемент массива равен 1, что означает, что каждая граница является внешней границей собственной области.

ispolycw(lon,lat)
ans = 1x6 logical array

   1   1   1   1   1   1

Отображение многоугольника на карте с помощью geoshow функция, указание 'DisplayType' как 'polygon'.

usamap 'Michigan'
geoshow(lat,lon,'DisplayType','polygon')

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

latlim = [47.8 48.2];
lonlim = [-89.3 -88.4];
[latT,lonT] = maptrimp(lat,lon,latlim,lonlim);

figure
usamap(latlim,lonlim)
geoshow(latT,lonT,'DisplayType','polygon')

Заполненная область полигонов с использованием географических координат

При отображении многоугольника на Земле граница делит Землю на две области. Обе эти области имеют конечную площадь, поэтому любая из них может быть внутренней областью многоугольника.

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

Например, можно отобразить небольшой многоугольник на карте мира.

lat2 = [0 10 40 30 0];
lon2 = [0 20 30 10 0];

figure
worldmap('world')
geoshow(lat2,lon2,'DisplayType','polygon')

Внешняя область многоугольника заполнена. Измените порядок вершин, применив flip функция для векторов координат. Затем снова отобразите полигон.

lat2f = flip(lat2);
lon2f = flip(lon2);

figure
worldmap('world')
geoshow(lat2f,lon2f,'DisplayType','polygon')

Вместо этого заполняется внутренняя область многоугольника.

См. также

| | | |