Серверы 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)