usamap
This example shows how to create maps of the United States using the usamap
function. The usamap
function lets you make maps of the United States as a whole, just the conterminous portion (the "lower 48" states), groups of states, or a single state. The map axes you create with the usamap
function has a labelled grid fitted around the area you specify but contains no data, allowing you to generate the kind of map you want using display functions such as the geoshow
function.
Specify map limits and set up a map axes object. This example creates a map of the Chesapeake Bay region.
latlim = [37 40]; lonlim = [-78 -74]; figure ax = usamap(latlim, lonlim)
ax = Axes with properties: XLim: [-1.8118e+05 1.8118e+05] YLim: [4.4299e+06 4.7720e+06] XScale: 'linear' YScale: 'linear' GridLineStyle: '-' Position: [0.1300 0.1100 0.7750 0.8150] Units: 'normalized' Show all properties
axis off
Determine the map projection used by the usamap
function. The Lambert Conformal Conic projection is often used for maps of the conterminous United States.
getm(gca,'MapProjection')
ans = 'lambert'
Use the shaperead
function to read U.S. state polygon boundaries from the usastatehi
shapefile. The function returns the data in a geostruct.
states = shaperead('usastatehi',... 'UseGeoCoords',true,'BoundingBox',[lonlim',latlim']);
Make a symbolspec to create a political map using the polcmap
function.
faceColors = makesymbolspec('Polygon',... {'INDEX',[1 numel(states)],'FaceColor',polcmap(numel(states))});
Display the filled polygons with the geoshow function.
geoshow(ax,states,'SymbolSpec',faceColors)
Extract the names for states within the window from the geostruct and use the textm
function to plot them at the label points provided by the geostruct. Because polcmap
assigns random pastel colors to patches, your map might look different than this example.
for k = 1:numel(states) labelPointIsWithinLimits = ... latlim(1) < states(k).LabelLat &&... latlim(2) > states(k).LabelLat &&... lonlim(1) < states(k).LabelLon &&... lonlim(2) > states(k).LabelLon; if labelPointIsWithinLimits textm(states(k).LabelLat,... states(k).LabelLon, states(k).Name,... 'HorizontalAlignment','center') end end textm(38.2,-76.1,' Chesapeake Bay ',... 'fontweight','bold','Rotation',270)