Обычно сервер WMS возвращает графическое представление слоя (или слоев) обратно запрашивающему, а не фактическим данным. Однако в некоторых редких случаях можно запросить фактические данные с конкретных серверов WMS.
Сервер WMS визуализирует один или несколько слоев и сохраняет результаты в файле, который передается запрашивающему устройству. The wmsread
и getMap
функции обращаются с просьбой от Вашего имени, захватывают поток во временном файле и импортируют содержимое файла в переменную в переменную рабочей области.
Могут быть доступны различные форматы файлов, такие как JPEG, PNG, GIF и GeoTIFF. Практически все серверы WMS поддерживают использование формата JPEG, а многие поддерживают более одного стандартного графического формата.
Формат может повлиять на качество результатов. Для примера формат PNG избегает связанных с плиткой программных продуктов, которые являются общими для JPEG. Если сервер поддерживает несколько форматов, можно задать формат при помощи wmsread
функции и ImageFormat
аргумент имя-значение; такие как 'ImageFormat','image/png'
.
Формат также определяет, получаете ли вы изобразительное представление, что является случаем с любым из стандартных графических форматов или абсолютно количественной сеткой данных (возможно, включая отрицательные, а также положительные значения). Количественные наборы данных предоставляются через форматы GeoTIFF и BIL.
Примечание
Чтобы запросить фактические данные, чаще всего необходимо создать запрос службы веб-покрытия (WCS) для растровых данных или запрос веб- Функции службы (WFS) для вектора данных. Mapping Toolbox™ не поддерживает запросы WCS и WFS.
Чтобы задать форматы GeoTIFF или BIL, используйте аргументы имя-значение 'ImageFormat','image/tiff'
или 'ImageFormat','image/bil'
, соответственно. Хотя файлы GeoTIFF и BIL могут содержать несколько совместно зарегистрированных полос (каналов), файлы GeoTIFF и BIL, возвращенные серверами WMS, включают только одну полосу и выход wmsread
является массивом 2-D.
Для примера можно получить подписанные, количественные повышения данные, а не изображение RGB, от сервера NASA WorldWind WMS. См. выход из команды:
wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?')
После извлечения данных в количественном формате отобразите их как поверхность или поверхность, сопоставленную с текстурой, а не как изображение, как показано в примерах ниже.
Сервер NASA WorldWind WMS содержит широкий выбор слоев, содержащих данные о повышении. Следуйте этому примеру, чтобы объединить данные о повышении с растровой картой, содержащей национальные контуры.
Получите информацию о сервере NASA WorldWind. Выберите слой, содержащий данные SRTM.
info = wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?'); layers = info.Layer; 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');
Radar Topography Mission (SRTM) - проект, возглавляемый Национальным геопространственным разведывательным управлением США (NGA) и НАСА. SRTM создал цифровую топографическую базу данных Земли с высоким разрешением. Набор данных SRTM30 Plus объединяет GTOPO30, SRTM-производную повышение земли и батиметрию Сэндвелла из Калифорнийского университета в Сан-Диего.
В данном примере прочитайте и отобразите слой SRTM30 Plus для залива Мэн с интервалом дискретизации 30 угловых секунд с помощью данных с сервера WorldWind.
Получите информацию о сервере NASA WorldWind. Найдите 'srtm30'
слой, представляющий собой набор данных SRTM30 Plus.
info = wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?'); layers = info.Layer; 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 на данные о повышении из USGS National Elevation Dataset (NED).
Найдите слои, содержащие данные ортоизображения и повышения.
ortho = wmsfind('/USGSImageryTopo/','SearchField','serverurl'); ortho = wmsupdate(ortho); info = wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?'); layers = info.Layer; 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','USGS NED and Ortho Image'}, ... '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);