Как правило, сервер 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');
Радарная миссия топографии шаттла (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 на данные о вертикальном изменении из Национального набора данных вертикального изменения (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);