Main Content

Polygons represent geographic objects that cover area, such as continents, islands, and lakes. They may contain holes or multiple regions. Create a polygon by listing vertices that define its boundaries without intersecting. The order of the vertices determines what parts of the polygon are filled. List external boundaries clockwise and internal boundaries counterclockwise, such that the inside of the polygon is always to the right of the boundary.

Display a simple polygon with one region and no holes. First, list its vertices in a clockwise order. Close the polygon by repeating the first vertex at the end of the list.

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

Display the vertices as a polygon using the `mapshow`

function by specifying `'DisplayType'`

as `'polygon'`

.

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

Define polygons with multiple regions or holes by separating the boundaries with `NaN`

values. List the vertices of external boundaries in a clockwise order and the vertices of internal boundaries in a counterclockwise order.

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];

These vectors define a polygon with one external boundary and two internal boundaries. The boundaries are separated using `NaN`

values. Verify the vertex order of the boundaries using the `ispolycw`

function. The `ispolycw`

function returns 1 when the vertices are in a clockwise order.

ispolycw(x2,y2)

`ans = `*1x3 logical array*
1 0 0

Display the polygon. The internal boundaries create holes within the polygon.

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

Now, list the vertices for a polygon with two nonintersecting regions. One of the regions has a hole. Verify the vertex order of the boundaries using `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

Display the polygon. The external boundaries create two nonintersecting regions and the internal boundary creates a hole.

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

In general, you can use geographic coordinates when you define polygons over small regions and call functions such as `ispolycw`

. This is true except in cases where the polygon wraps a pole or crosses the Antimeridian.

For example, display the state of Michigan on a map using polygons with geographic coordinates. First, read the vertices of the state boundaries.

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

Count the boundaries and verify their vertex order. To use `ispolycw`

with geographic coordinates, list the longitude vector as the first argument and the latitude vector as the second argument. The 1-by-6 output array means there are six boundaries. Each element of the array is 1, which means that each boundary is the exterior boundary of its own region.

ispolycw(lon,lat)

`ans = `*1x6 logical array*
1 1 1 1 1 1

Display the polygon on a map using the `geoshow`

function, specifying `'DisplayType'`

as `'polygon'`

.

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

Clip the polygon to the latitude and longitude limits of Isle Royale National Park using the `maptrimp`

function. Display the clipped polygon on a new map.

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')

When you display a polygon on the Earth, the boundary divides the Earth into two regions. Both of these regions have finite area, so either could be the inside region of the polygon.

As a result, when you project the vertices of a polygon onto a map using the `geoshow`

function, the filled region may be different than you expect. Change which region is filled by reversing the order of the vertices.

For example, display a small polygon on a world map.

lat2 = [0 10 40 30 0]; lon2 = [0 20 30 10 0]; figure worldmap('world') geoshow(lat2,lon2,'DisplayType','polygon')

The outside region of the polygon is filled. Reverse the order of the vertices by applying the `flip`

function to the coordinate vectors. Then, display the polygon again.

lat2f = flip(lat2); lon2f = flip(lon2); figure worldmap('world') geoshow(lat2f,lon2f,'DisplayType','polygon')

The inside region of the polygon is filled instead.