Добавление легенды к карте WMS

Серверы WMS представляют слои как изображения. Приблизительно 45% серверов WMS в Базе данных WMS обеспечивают легенды, чтобы помочь вам интерпретировать пиксельные цвета изображений. Можно загрузить изображение легенды для слоя путем доступа к Details.Style.LegendURL поле WMSLayer объект. Для получения дополнительной информации о Details.Style.LegendURL поле, смотрите WMSLayer.Details.

В этом примере показано, как считать и отобразить карту WMS температур поверхности, загрузите связанное изображение легенды и объедините карту WMS и легенду в одно изображение.

Считайте и отобразите карту

Ищите Базу данных WMS слои от Космического полета Годдарда НАСА Сервер SVS Изображений, затем найдите слой, который содержит городские температурные подписи. Синхронизируйте слой с сервером при помощи wmsupdate функция. Чтобы получить доступ к изображению легенды, необходимо синхронизировать слой с сервером.

layers = wmsfind('svs.gsfc.nasa.gov','SearchField','serverurl');
urban_temperature = refine(layers,'urban*temperature');
urban_temperature = wmsupdate(urban_temperature);

Считайте и отобразите слой на карте.

[A,R] = wmsread(urban_temperature);
mapFigure = figure;
usamap(A,R)
geoshow(A,R)

Настройте карту путем добавления городских маркеров, государственных границ, меридиана и найдите что-либо подобное меткам, северной стреле и заголовку.

latlim = R.LatitudeLimits;
lonlim = R.LongitudeLimits;

S = shaperead('worldcities.shp','UseGeoCoords',true,...
    'BoundingBox',[lonlim(1) latlim(1);lonlim(2) latlim(2)]);
geoshow(S,'MarkerEdgeColor','w','Color','w')
for k=1:numel(S)
   textm(S(k).Lat,S(k).Lon,S(k).Name,'Color','w', ...
       'FontWeight','bold')
end

geoshow('usastatehi.shp', 'FaceColor', 'none',...
   'EdgeColor','black')

mlabel('FontWeight','bold')
plabel('FontWeight','bold')

northarrow('Facecolor','w','EdgeColor','w',...
    'Latitude',36.249,'Longitude',-71.173)

title('Urban Temperature Signatures')

Ищите легенду

Определите, доступно ли изображение легенды путем доступа к Details.Style.LegendURL поле слоя.

urban_temperature.Details.Style.LegendURL
ans = struct with fields:
    OnlineResource: 'http://svs.gsfc.nasa.gov/vis/a000000/a003100/a003152/temp_bar.png'
            Format: 'image/png'
            Height: 90
             Width: 320

Поля не пусты, таким образом, легенда доступна. Загрузите изображение легенды.

url = urban_temperature.Details.Style.LegendURL.OnlineResource;
legendImage = webread(url);

Создайте фигуру и оси, которые одного размера с изображением. Затем отобразите изображение. Обратите внимание на то, что легенда является изображением шкалы палитры, не Legend объект.

sz = size(legendImage);

legendFigure = figure;
pos = legendFigure.Position;
legendFigure.Position = [pos(1) pos(2) sz(2) sz(1)];

ax = gca;
ax.Units = 'pixels';
ax.Position = [0 0 sz(2) sz(1)];

imshow(legendImage)

Объедините карту и легенду

Когда вы изображения на дисплее с помощью geoshow функция, проекция карты может заставить текст казаться деформированным. Вместо этого преобразуйте карту в изображение и объедините изображение карты с изображением легенды.

Преобразуйте карту в изображение при помощи getframe и frame2im функции.

mapImage = getframe(mapFigure);

mapImage = frame2im(mapImage);

Чтобы объединить изображения, ширина изображений должна быть равной. В этом примере ширина изображения легенды меньше, чем ширина изображения карты. Сделайте ширины тем же самым путем дополнения изображения легенды.

p = (size(mapImage,2) - size(legendImage,2))/2;
legendImage = padarray(legendImage,[0 p 0],255,'both');

Объедините изображения.

combinedImage = [mapImage; legendImage];

Создайте фигуру и оси, которые одного размера с объединенным изображением. Отобразите объединенное изображение на рисунке.

combinedsz = size(combinedImage);

combinedFigure = figure;
pos = combinedFigure.Position;
combinedFigure.Position = ...
    [pos(1) pos(2) combinedsz(2) combinedsz(1)];

ax = gca;
ax.Units = 'pixels';
ax.Position = [0 0 combinedsz(2) combinedsz(1)];

imshow(combinedImage)

Смотрите также

Функции

Объекты

Для просмотра документации необходимо авторизоваться на сайте