Многоугольники представляют географические объекты, которые покрывают площадь, такие как континенты, острова и озера. Они могут содержать отверстия или несколько областей. Создать многоугольник путем перечисления вершин, определяющих его контуры без пересечения. Порядок вершин определяет, какие части многоугольника будут заполнены. Перечислите внешние контуры по часовой стрелке и внутренние контуры против часовой стрелки, так что внутренняя часть многоугольника всегда находится справа от контура.
Отобразить простой многоугольник с одной областью и без отверстий. Сначала перечислите его вершины в порядке часовой стрелки. Закройте многоугольник, повторив первую вершину в конце списка.
x1 = [0 3 4 1 0]; y1 = [0 1 3 2 0];
Отобразите вершины как многоугольник с помощью mapshow
функция путем определения 'DisplayType'
как 'polygon'
.
mapshow(x1,y1,'DisplayType','polygon')
Задайте многоугольники с несколькими областями или отверстиями путем разделения контуров на 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')
Теперь перечислите вершины для многоугольника с двумя непересекающимися областями. В одном из областей есть отверстие. Проверьте вершинный порядок контуров с помощью 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')
В целом можно использовать географические координаты, когда вы задаете многоугольники по малым областям и вызываете такие функции, как 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')
Вместо этого заполняется внутренняя область многоугольника.