exponenta event banner

Создание простых карт с помощью usamap

В этом примере показано, как создавать карты США с помощью 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 файл формы. Функция возвращает данные в геострукте.

states = shaperead('usastatehi',...
    'UseGeoCoords',true,'BoundingBox',[lonlim',latlim']);

Создайте символ, чтобы создать политическую карту с помощью polcmap функция.

faceColors = makesymbolspec('Polygon',...
    {'INDEX',[1 numel(states)],'FaceColor',polcmap(numel(states))});

Отображение заполненных многоугольников с помощью функции геоскопии.

geoshow(ax,states,'SymbolSpec',faceColors)

Извлеките имена состояний в окне из геострукта и используйте 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)