exponenta event banner

Получение данных с сервера веб-карт

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

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

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

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

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

Примечание

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

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

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

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

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

Объединение данных фасада с растрированными векторными данными

Сервер НАСА WorldWind WMS содержит широкий выбор слоев, содержащих данные о высотах. Ниже приведен пример объединения данных фасада с растровой картой, содержащей национальные границы.

  1. Получите информацию о сервере НАСА WorldWind. Выберите слой, содержащий данные SRTM.

    info = wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?');
    layers = info.Layer;
    srtm = refine(layers,'SRTM','SearchField','layername');
  2. Укажите пределы широты и долготы для региона, окружающего Афганистан.

    latlim = [25 40];
    lonlim = [55 80];
    
  3. Считывание данных с использованием 1-минутного интервала выборки. Укажите 'ImageFormat' как 'image/tiff'.

    cellSize = dms2degrees([0,1,0]);
    [ZA,RA] = wmsread(srtm,'Latlim',latlim,'Lonlim',lonlim, ...
       'CellSize',cellSize,'ImageFormat','image/tiff');
  4. Обратите внимание, что ZA - массив данных об отметке, а не изображение RGB. Найдите минимальную и максимальную отметки.

    elevationLimits = [min(min(ZA)) max(max(ZA))]
    elevationLimits = 1×2 int16 row vector
    
       -1415    7715
  5. Отображение данных фасада в виде текстуры.

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

  6. Включите национальные границы от сервера 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.

  1. Получите информацию о сервере НАСА WorldWind. Найти 'srtm30' слой, который является набором данных SRTM30 Plus.

    info = wmsinfo('https://worldwind26.arc.nasa.gov/wms/elev?');
    layers = info.Layer;
    srtm = refine(layers,'srtm30','SearchField','layername');
  2. Укажите пределы широты и долготы для региона, окружающего Мэнский залив. Установите интервал выборки в 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);
  3. Обратите внимание, что Z - массив данных об отметке, а не изображение RGB. Найти минимальное и максимальное значения Z.

    elevationLimits = [min(min(Z)) max(max(Z))]
    
    elevationLimits = 1×2 int16 row vector
    
       -4540    1469
  4. Создайте карту. Объект-ссылка растра 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 на данные об отметке из национального набора данных об отметке USGS (NED).

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

    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');
  2. Задайте пределы широты и долготы для области вокруг Большого каньона. Укажите размер изображения.

    latlim = [36 36.23];
    lonlim = [-113.36 -113.13];
    imageHeight = 575;
    imageWidth = 575;
    
  3. Прочитайте слои. Укажите '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.

  4. Нанесите ортоизображение на данные фасада.

    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

  5. Настройте вид камеры и освещение.

    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);

См. также

| |

Связанные темы