Создание и отображение многоугольников

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

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 функция. The 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')

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

См. также

| | | |