Считайте данные из сервера WMS

Как правило, сервер WMS возвращает графическое представление слоя (или слоев) назад к запрашивающей стороне, а не фактическим данным. Однако в некоторых редких случаях, можно запросить фактические данные с определенных серверов WMS.

Сервер WMS представляет один или несколько слоев и хранит результаты в файле, который передается потоком к запрашивающей стороне. wmsread и getMap функции выполняют запрос от вашего имени, получают поток во временном файле и импортируют содержимое файла в переменную рабочей области.

Различные форматы файлов могут быть доступными, такими как JPEG, PNG, GIF и GeoTIFF. Почти все серверы WMS поддерживают использование формата JPEG, и многие поддерживают больше чем один стандартный графический формат.

Формат может влиять на качество ваших результатов. Например, формат PNG избегает связанных с мозаикой артефактов, которые распространены с JPEG. Если сервер поддерживает несколько форматов, можно задать формат при помощи wmsread функционируйте и ImageFormat аргумент значения имени; такой как 'ImageFormat','image/png'.

Формат также определяет, получаете ли вы графическое представление, которое имеет место с любым из стандартных графических форматов или сеткой абсолютно количественных данных (возможно включая отрицательные, а также положительные значения). Наборы количественных данных обеспечиваются через GeoTIFF и форматы BIL.

Примечание

Чтобы запросить фактические данные, чаще всего необходимо создать или запрос Веб-сервиса покрытия (WCS), для растровых данных, или запрос Веб-сервиса функции (WFS), для векторных данных. Mapping Toolbox™ не поддерживает запросы WFS и WCS.

Чтобы задать GeoTIFF или форматы BIL, используйте аргументы name-value 'ImageFormat','image/tiff' или 'ImageFormat','image/bil', соответственно. Несмотря на то, что GeoTIFF и файлы BIL могут содержать несколько co-registered полос (каналы), GeoTIFF и файлы BIL, возвращенные серверами WMS, включают только одну полосу и выход wmsread 2D массив.

Например, можно получить подписанные, количественные данные о вертикальном изменении, а не изображение RGB, с сервера WMS НАСА WorldWind. Смотрите выход от команды:

wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?')

После получения данных в количественном формате отобразите его как поверхность или сопоставленную со структурой поверхность, а не как изображение, как показано в примерах ниже.

Объедините данные о вертикальном изменении с растеризированными векторными данными

Сервер WMS НАСА WorldWind содержит широкий выбор слоев с данными о вертикальном изменении. В этом примере показано, как объединить данные о вертикальном изменении с растровой картой, содержащей национальные контуры.

Ищите Базу данных WMS сервер НАСА WorldWind. Выберите слой, содержащий данные SRTM.

layers = wmsfind('worldwind26*elev','SearchField','serverurl');
layers = wmsupdate(layers);
srtm = refine(layers,'SRTM','SearchField','layername');

Задайте пределы широты и долготы для области, окружающей Афганистан.

latlim = [25 40];
lonlim = [55 80];

Считайте данные с помощью 1-минутного интервала выборки. Задайте 'ImageFormat' как 'image/tiff'.

cellSize = dms2degrees([0,1,0]);
[ZA,RA] = wmsread(srtm,'Latlim',latlim,'Lonlim',lonlim, ...
   'CellSize',cellSize,'ImageFormat','image/tiff');

Обратите внимание на то, что ZA массив данных о вертикальном изменении, а не изображения RGB. Найдите минимальные и максимальные вертикальные изменения.

elevationLimits = [min(min(ZA)) max(max(ZA))]
elevationLimits = 1×2 int16 row vector

   -1415    7715

Отобразите данные о вертикальном изменении как текстурную карту.

figure
worldmap('Afghanistan')
geoshow(ZA,RA,'DisplayType','texturemap')
demcmap(double(ZA))
title({'Afghanistan and Surrounding Region',srtm.LayerTitle}, ...
    'Interpreter','none');

Встройте национальные контуры с сервера VMAP0 WMS на карту вертикального изменения.

vmap0 = wmsfind('vmap0.tiles','SearchField','serverurl');
boundaries = refine(vmap0,'country_02');
B = wmsread(boundaries,'Latlim',latlim, ...
    'Lonlim',lonlim,'CellSize',cellSize);
ZB = ZA;
ZB(B(:,:,1) < 250) = min(ZA(:));
figure
worldmap('Afghanistan')
demcmap(double(ZA))
geoshow(ZB,RA,'DisplayType','texturemap')
title({'Afghanistan and Country Boundaries',srtm.LayerTitle}, ...
    'Interpreter','none');

Отобразите объединенный слой вертикального изменения и батиметрии (SRTM30 плюс)

Радарная миссия топографии шаттла (SRTM) является проектом во главе с США Национальная Геопространственная Спецслужба (NGA) и НАСА. SRTM создал цифровую, топографическую базу данных с высоким разрешением Земли. SRTM30 Плюс набор данных комбинирует GTOPO30, SRTM-выведенное вертикальное изменение земли и данные о батиметрии Sandwell Калифорнийского университета в Сан-Диего.

В данном примере считайте и отобразите слой SRTM30 Plus для Залива Мэна в 30 интервалах выборки арксекунды с помощью данных из сервера WorldWind.

Ищите Базу данных WMS сервер НАСА WorldWind. Найдите 'srtm30' слой, который является SRTM30 Плюс набор данных.

layers = wmsfind('worldwind26*elev','SearchField','serverurl');
layers = wmsupdate(layers);
srtm = refine(layers,'srtm30','SearchField','layername');

Задайте пределы широты и долготы для области, окружающей Залив Мэна. Установите интервал выборки на 30 арксекунд и формат изображения к image/tiff. Запросите карту с сервера.

latlim = [40 46];
lonlim = [-71 -65];
samplesPerInterval = dms2degrees([0 0 30]);
imageFormat = 'image/tiff';
[Z,R] = wmsread(srtm,'Latlim',latlim, ...
   'Lonlim',lonlim,'ImageFormat',imageFormat, ...
   'CellSize',samplesPerInterval);

Обратите внимание на то, что Z массив данных о вертикальном изменении, а не изображения RGB. Найдите минимальные и максимальные значения Z.

elevationLimits = [min(min(Z)) max(max(Z))]
elevationLimits = 1×2 int16 row vector

   -4540    1469

Создайте карту. Объект растровой привязки R1 связывает внутренние координаты растровой карты к географической системе координат EPSG:4326. Примените палитру, подходящую для данных о вертикальном изменении. Отобразите и очертите карту на уровне моря.

figure
worldmap(Z,R)
geoshow(Z,R,'DisplayType','texturemap')
demcmap(double(Z))
contourm(double(Z),R,[0 0],'Color','k')
colorbar
title ({'Gulf of Maine',srtm.LayerTitle}, ...
   'Interpreter','none')

Драпируйте Формирование изображений WMS на Данные о Вертикальном изменении

В этом примере показано, как драпировать формирование изображений WMS на данные о вертикальном изменении из Национального набора данных вертикального изменения (NED) USGS.

Найдите слои, содержащие данные о вертикальном изменении и ортоизображение.

ortho = wmsfind('/USGSImageryTopo/','SearchField','serverurl'); 
ortho = wmsupdate(ortho);

layers = wmsfind('worldwind26*elev','SearchField','serverurl');
layers = wmsupdate(layers);
us_ned = refine(layers,'usgs-ned');

Задайте пределы широты и долготы для области вокруг Гранд-Каньона. Задайте размер изображения.

latlim = [36 36.23];
lonlim = [-113.36 -113.13];
imageHeight = 575;
imageWidth = 575;

Считайте слои. Задайте 'ImageFormat' из слоя вертикального изменения как 'image/tiff'.

A = wmsread(ortho,'Latlim',latlim,'Lonlim',lonlim, ...
   'ImageHeight',imageHeight,'ImageWidth',imageWidth);

[Z,R] = wmsread(us_ned,'ImageFormat','image/tiff', ...
    'Latlim',latlim,'Lonlim',lonlim, ...
    'ImageHeight',imageHeight,'ImageWidth',imageWidth);

Обратите внимание на то, что Z массив данных о вертикальном изменении, а не изображения RGB.

Драпируйте ортоизображение на данные о вертикальном изменении.

figure
usamap(latlim,lonlim)
framem off
mlabel off
plabel off
gridm off
geoshow(double(Z),R,'DisplayType','surface','CData',A);
daspectm('m',1)
title({'Grand Canyon','Orthoimage and USGS NED'}, ...
   'FontSize',8);
axis vis3d

Настройте поле зрения камеры и подсветку.

cameraPosition = [96431 4.2956e+06 -72027];
cameraTarget = [-82.211 4.2805e+06 3054.6];
cameraViewAngle = 8.1561;
cameraUpVector = [3.8362e+06 5.9871e+05 5.05123e+006];
set(gca,'CameraPosition',cameraPosition, ...
    'CameraTarget',cameraTarget, ...
    'CameraViewAngle',cameraViewAngle, ...
    'CameraUpVector',cameraUpVector);

lightHandle = camlight;
camLightPosition = [7169.3 1.4081e+06 -4.1188e+006];
set(lightHandle,'Position',camLightPosition);

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

| |

Похожие темы

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