Можно создать карты той же географической области в разное время и просмотреть их как фильм. Сроком на семь дней считайте и отобразите ежедневный составной объект визуальных изображений от Умеренного Спектрорадиометра Обработки изображений Разрешения НАСА (MODIS) сцены, полученные в течение месяца декабря 2010.
Ищите Базу данных WMS слой MODIS.
neo = wmsfind('neowms*nasa', 'SearchField', 'serverurl');
modis = neo.refine('true*color*terra*modis');
modis = wmsupdate(modis);
Создайте объект WebMapServer.
server = WebMapServer(modis.ServerURL);
Создайте объект WMSMapRequest.
mapRequest = WMSMapRequest(modis, server);
Поле Extent предоставляет информацию о том, как получить отдельные кадры. Можно запросить один день, поскольку степень задана за день ('/P1D'). Обратите внимание на то, что на декабрь 2010, кадры на 8 декабря и 31 декабря не доступны.
modis.Details.Dimension.Extent
Создайте массив, указывающий на первые семь дней.
days = 1:7;
Установите значение startTime до 01 декабря 2010 и используйте последовательный номер даты.
time = '2010-12-01'; startTime = datenum(time);
Создайте окно фигуры с осями, подходящими для области, заданной слоем modis.
hFig = figure('Color', 'white');
worldmap(mapRequest.Latlim, mapRequest.Lonlim);
Сохраните каждый кадр в видеофайл.
videoFilename = 'modis_dec.avi'; writer = VideoWriter(videoFilename); writer.FrameRate = 1; writer.Quality = 100; writer.open;
Получите карту слоя modis в течение каждого требуемого дня. Установите свойство Time на дневной номер. При получении данных из сервера используйте оператор try/catch, чтобы проигнорировать или данные, не найденные на сервере или любую ошибку, выпущенную сервером. Установите startTime на один день меньше для правильной индексации.
startTime = startTime - 1;
for k = days
try
mapRequest.Time = startTime + k;
timeStr = datestr(mapRequest.Time);
dailyImage = server.getMap(mapRequest.RequestURL);
geoshow(dailyImage, mapRequest.RasterReference);
title({mapRequest.Layer.LayerTitle, timeStr}, ...
'Interpreter', 'none', 'FontWeight', 'bold')
shg
frame = getframe(hFig);
writer.writeVideo(frame);
catch e
fprintf(['Server error: %s.\n', ...
'Ignoring frame number %d on day %s.\n'], ...
e.message, k, timeStr)
end
drawnow
shg
end
writer.close
Читайте во всех кадрах видео.
v = VideoReader(videoFilename); vidFrames = read(v); numFrames = get(v, 'NumberOfFrames');
Создайте структуру фильма MATLAB® из кадров видео.
frames = struct('cdata', [], 'colormap', []);
frames(numFrames) = frames(1);
for k = 1 : numFrames
frames(k).cdata = vidFrames(:,:,:,k);
frames(k).colormap = [];
end
Воспроизведите фильм однажды в частоте кадров видео.
movie(hFig, frames, 1, v.FrameRate)
Считайте и отобразите анимацию Шельфового ледника Ларсена, испытывающего поразительный коллапс между 31 января и 7 марта 2002.
Ищите Базу данных WMS фразу "Шельфовый ледник Ларсена".
iceLayer = wmsfind('Larsen Ice Shelf');Попробуйте первый слой.
Создайте объект WebMapServer.
server = WebMapServer(iceLayer(1).ServerURL);
Используйте метод WebMapServer.updateLayers, чтобы синхронизировать слой с исходным сервером WMS. Получите новые данные и заполните Abstract, CoordRefSysCodes и поля Details.
iceLayer = server.updateLayers(iceLayer(1));
Просмотрите краткий обзор.
fprintf('%s\n', iceLayer(1).Abstract)Создайте объект WMSMapRequest.
request = WMSMapRequest(iceLayer(1), server);
Поскольку вы обновили свой слой, поле Details теперь имеет содержимое. Нажмите Details в редакторе переменных MATLAB. Затем нажмите Dimension. Именем размерности является 'time'. Нажмите Extent. Поле Extent обеспечивает доступные значения для размерности в это время случая. Сохраните эту информацию путем ввода следующего в командной строке:
extent = [',' iceLayer.Details.Dimension.Extent, ','];
Вычислите количество необходимых кадров. (extent содержит запятую перед первым кадром и после последнего кадра. Чтобы получить количество кадров, вычтите 1.)
frameIndex = strfind(extent, ','); numFrames = numel(frameIndex) - 1;
Создайте окно фигуры и настройте карту оси с соответствующими географическими пределами.
h = figure; worldmap(request.Latlim, request.Lonlim)
Установите свойства осей карты. MLineLocation устанавливает интервал между отображенными меридианами сетки. MLabelParallel определяет параллель, где метки появляются.
setm(gca,'MLineLocation', 1, 'MLabelLocation', 1, ... 'MLabelParallel',-67.5, 'LabelRotation', 'off');
Инициализируйте значение animated к 0.
animated(1,1,1,numFrames) = 0;
Отобразите изображение Шельфового ледника Ларсена в различные дни.
for k=1:numFrames
request.Time = extent(frameIndex(k)+1:frameIndex(k+1)-1);
iceImage = server.getMap(request.RequestURL);
geoshow(iceImage, request.RasterReference)
title(request.Time, 'Interpreter', 'none')
drawnow
shg
frame = getframe(h);
if k == 1
[animated, cmap] = rgb2ind(frame.cdata, 256, 'nodither');
else
animated(:,:,1,k) = rgb2ind(frame.cdata, cmap, 'nodither');
end
endСохраните и затем просмотрите анимированный файл GIF.
filename = 'wmsanimated.gif'; imwrite(animated, cmap, filename, 'DelayTime', 1.5, ... 'LoopCount', inf); web(filename)
Создайте снимки от анимации Шельфового ледника Ларсена

Отобразите Радар Следующего поколения (NEXRAD) изображения для данных об использовании Соединенных Штатов из веб-сервера карты Айовы экологической мезосети (IEM). Сервер хранит слои, покрывающие прошлые 50 минут до настоящего времени время с шагом 5 минут. Считайте и отобразите объединенные слои.
Найдите слои в Базе данных WMS, которые включают 'mesonet' и 'nexrad' в их полях ServerURL.
mesonet = wmsfind('mesonet*nexrad', 'SearchField', 'serverurl');
NEXRAD Основное Отражение, Текущее ('nexrad-n0r'), измеряет интенсивность осадков. Совершенствуйте свой поиск, чтобы включать только слои с этой фразой в одном из полей поиска.
nexrad = mesonet.refine('nexrad-n0r', 'SearchField', 'any');
Удалите 900 913 слоев, потому что они предназначаются для наложения Google Maps™. Также удалите слой WMST, потому что он содержит данные в течение различных времен.
layers_900913 = nexrad.refine('900913', 'SearchField', ...
'layername');
layer_wmst = nexrad.refine('wmst', 'SearchField', 'layername');
rmLayerNames = {layers_900913.LayerName layer_wmst.LayerName};
index = ismember({nexrad.LayerName}, rmLayerNames);
nexrad = nexrad(~index);
Обновите свой слой nexrad, чтобы заполнить все поля и получить новые данные.
nexrad = wmsupdate(nexrad, 'AllowMultipleServers', true);
'conus' представляет совпадающие 48 штатов США (все кроме Гавайев и Аляски). Используйте функцию usamap, чтобы создать карту оси для совпадающих состояний. Читайте в слоях nexrad.
region = 'conus'; figure usamap(region) mstruct = gcm; latlim = mstruct.maplatlimit; lonlim = mstruct.maplonlimit; [A, R] = wmsread(nexrad, 'Latlim', latlim, 'Lonlim', lonlim);
Отобразите карту объединенных слоев NEXRAD. Наложите с полигонами государственной границы Соединенных Штатов.
geoshow(A, R);
geoshow('usastatehi.shp', 'FaceColor', 'none');
title({'NEXRAD Radar Map', 'Merged Layers'});

Цикл через последовательность радарных наблюдений таймлапса.
hfig = figure;
usamap(region)
hstates = geoshow('usastatehi.shp', 'FaceColor', 'none');
numFrames = numel(nexrad);
frames = struct('cdata', [], 'colormap', []);
frames(numFrames) = frames;
hmap = [];
frameIndex = 0;
for k = numFrames:-1:1
frameIndex = frameIndex + 1;
delete(hmap)
[A, R] = wmsread(nexrad(k), 'Latlim', latlim, 'Lonlim', lonlim);
hmap = geoshow(A, R);
uistack(hstates,'top')
title(nexrad(k).LayerName)
drawnow
frames(frameIndex) = getframe(hfig);
endСоздайте массив, чтобы выписать как анимированный файл GIF.
animated(1,1,1,numFrames) = 0;
for k=1:numFrames
if k == 1
[animated, cmap] = rgb2ind(frames(k).cdata, 256, 'nodither');
else
animated(:,:,1,k) = ...
rgb2ind(frames(k).cdata, cmap, 'nodither');
end
end
Просмотрите анимированный файл GIF.
filename = 'wmsnexrad.gif'; imwrite(animated, cmap, filename, 'DelayTime', 1.5, ... 'LoopCount', inf); web(filename)