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

Как правило, сервер 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, используйте аргументы '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 содержит широкий выбор слоев, содержащих данные о вертикальном изменении. Последуйте этому примеру, чтобы объединить данные о вертикальном изменении с растровой картой, содержащей национальные контуры.

  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 Плюс набор данных.

    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 на данные о вертикальном изменении из Национального набора данных вертикального изменения (NED) USGS.

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

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

| |

Похожие темы

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