polycenter documentation

The polycenter function finds coordinates at the center of the largest section of a polygon. This is similar to the centroid, but ensures the coordinates are in the interior of the polygon (centroids may be outside of a cresecent shape, for example).

Back to Climate Data Tools Contents.

Contents

Syntax

[xc,yc] = polycenter(P)
[xc,yc] = polycenter(S)
[lonc,latc] = polycenter(S)
[xc,yc] = polycenter(x,y)

Description

[xc,yc] = polycenter(P) returns the "center" coordinate(s) xc,yc of any polyshape(s) P.

[xc,yc] = polycenter(S) returns the "center" coordinate(s) xc,yc of each row in the shapefile structure S. This syntax assumes the shapefile structure S contains the fields S.X and S.Y.

[lonc,latc] = polycenter(S) returns the "center" longitude and latitude if the shapefile structure S does not contain S.X or S.Y, but does contain S.Lat and S.Lon.

[xc,yc] = polycenter(x,y) returns the "center" coordinate(s) xc,yc for the inputs coordinates x,y. If x,y are 1d arrays, the outputs xc,yc are scalars. If input x,y are cell arrays, outputs xc,yc will contain a center coordinate for the polygons bound by the arrays in each cell.

Example 1

Start by loading the state outlines (requires Matab's Mapping Toolbox):

S = shaperead('usastatehi','UseGeoCoords',true);

What's wrong with labelling centroids of weird-shaped polygons? Well, the centroid isn't always inside the polygon it describes. Consider the case of Hawaii:

% Convert the outline of Hawaii to a polyshape object:
P = polyshape(S(11).Lon,S(11).Lat);

% Find the centroid:
[xcent,ycent] = centroid(P);

figure
plot(P,'facecolor',rgb('tan'))
hold on
plot(xcent,ycent,'ro')
text(xcent,ycent,'centroid','horiz','center','vert','top')
axis([-160 -154   18.5   22.5])

The polycenter function finds a better center coordinate than the centroid:

[xc,yc] = polycenter(P);

plot(xc,yc,'kx')
text(xc,yc,'polycenter','horiz','center','vert','top')

Example 2

Now find the "center" coordinates of all the states, directly from the shapefile structure S:

[lonc,latc] = polycenter(S);

figure
plot([S.Lon],[S.Lat])
hold on
plot(lonc,latc,'x')

Author Info

This function is part of the Climate Data Toolbox for Matlab. The function and supporting documentation were written by Chad A. Greene of NASA's Jet Propulsion Laboratory.