Этот пример показывает, как создать карты Соединенных Штатов с помощью функции usamap
. Функция 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
. Ламберт Конформная Коническая проекция часто используется для карт совпадающих Соединенных Штатов.
getm(gca,'MapProjection')
ans = 'lambert'
Используйте функцию shaperead
, чтобы считать Американские Государственные контуры полигона из файла форм usastatehi
. Функция возвращает данные в гео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
, чтобы построить их в точках метки, обеспеченных геоstruct. Поскольку 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)