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

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

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 object. The axes object 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 object. The axes object 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 object. The axes object contains an object of type patch.

Многоугольники Используя географические координаты

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

Например, отобразите Мичиган на карте с помощью многоугольников с географическими координатами. Во-первых, считайте вершины государственных границ.

states = shaperead('usastatehi.shp','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')

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

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

Функции

Объекты