usamap
В этом примере показано, как создать карты США с помощью usamap
функция. The usamap
функция позволяет вам делать карты Соединенных Штатов в целом, просто контерминированного фрагмента («нижние 48» состояния), групп состояний или одного состояния. Оси карты, которые вы создаете со usamap
функция имеет маркированную сетку, установленную вокруг области, которую вы задаете, но не содержит данных, что позволяет вам генерировать вид карты, которую вы хотите использовать функции отображения, такие как geoshow
функция.
Задайте пределы карты и настройте объект осей карты. Этот пример создает карту области Чесапикского залива.
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
Определите проекцию карты, используемую usamap
функция. Проекция Lambert Conformal Conic часто используется для карт контерминозных Соединенных Штатов.
getm(gca,'MapProjection')
ans = 'lambert'
Используйте shaperead
функция для чтения контуров многоугольников в состояниях из usastatehi
shapefile. Функция возвращает данные в геоstruct.
states = shaperead('usastatehi',... 'UseGeoCoords',true,'BoundingBox',[lonlim',latlim']);
Создайте symbolspec, чтобы создать политическую карту с помощью polcmap
функция.
faceColors = makesymbolspec('Polygon',... {'INDEX',[1 numel(states)],'FaceColor',polcmap(numel(states))});
Отобразите заполненные многоугольники с функцией геопоказа.
geoshow(ax,states,'SymbolSpec',faceColors)
Извлеките имена для состояний в окне из геоstruct и используйте textm
функция для построения графиков в точках меток, обеспечиваемых геоструктом. Потому что polcmap
назначает случайные цвета пастели закрашенным фигурам, ваша карта может выглядеть иначе, чем этот пример.
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)