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

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

Сервер WMS представляет один или несколько слоев и хранит результаты в файле, который передается потоком к запрашивающей стороне. wmsread функция или getMap метод WebMapServer возразите, выполняет запрос от вашего имени, получает поток во временном файле и импортирует содержимое файла в переменную в вашей рабочей области MATLAB®. Формат файла может быть стандартным графическим форматом, таким как JPEG, PNG или GIF, или это может быть с чередованием строк с методической точностью (BIL) формат, который популярен в дистанционном зондировании. Почти все серверы WMS поддерживают использование формата JPEG, и многие поддерживают больше чем один стандартный графический формат. Только очень немного серверов WMS поддерживают формат BIL, несмотря на то, что это очень полезно.

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

Примечание

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

С сервером, который поддерживает несколько форматов, можно управлять, какой формат используется путем определения ImageFormat пара "имя-значение" при вызове wmsread. Например, если бы сервер поддерживает формат PNG, вы выбрали бы PNG путем определения 'ImageFormat','image/png', таким образом избегая возможности артефактов JPEG.

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

Например, можно получить подписанные, количественные данные о вертикальном изменении, а не изображение RGB, с сервера WMS НАСА WorldWind (единственный сервер в базе данных Mapping Toolbox WMS, которая, как известно, поддерживала 'image/bil' опция). Смотрите выход от команды:

wmsinfo('https://data.worldwind.arc.nasa.gov/elev?')

На самом деле, потому что сервер WMS НАСА WorldWind возвращает представленные слои только в 'image/bil' формат, вы не должны обеспечивать 'ImageFormat' пара "имя-значение" при использовании этого сервера. Однако это - хорошая практика, чтобы задать формат изображения, в случае, если сервер когда-либо обновляется, чтобы обеспечить представленный слоями в других форматах изображения.

После получения данных с помощью 'ImageFormat','image/bil' опция, отобразите его как поверхность или сопоставленную со структурой поверхность, а не как изображение, как показано в примерах ниже.

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

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

  1. Найдите слои с сервера НАСА WorldWind.

    layers = wmsfind('data.worldwind*elev', 'SearchField', 'serverurl');
    layers = wmsupdate(layers);
    
  2. Выберите 'EarthAsterElevations30m' слой, содержащий данные SRTM30, объединен с глобальными данными ASTER.

    aster = layers.refine('EarthAsterElevations30m', ...
                          'SearchField', 'layername');
    
  3. Задайте область, окружающую Афганистан.

    latlim = [25 40];
    lonlim = [55 80];
    
  4. Получите данные в 1-минутном интервале выборки.

    cellSize = dms2degrees([0,1,0]);
    [ZA, RA] = wmsread(aster, 'Latlim', latlim, 'Lonlim', lonlim, ...
       'CellSize', cellSize, 'ImageFormat', 'image/bil');
    
  5. Отобразите данные о вертикальном изменении как текстурную карту.

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

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

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

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

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

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

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

    wldwind = wmsfind('data.worldwind*elev', 'SearchField', 'serverurl');
    wldwind = wmsupdate(wldwind);
    srtmplus = wldwind.refine('srtm30', 'SearchField', 'layername');
    
  2. Установите желаемые географические пределы.

    latlim = [40 46];
    lonlim = [-71 -65];
    
  3. Установите интервал выборки на 30 арксекунд.

    samplesPerInterval = dms2degrees([0 0 30]);
    
  4. Установите ImageFormat к image/bil.

    imageFormat = 'image/bil';
  5. Запросите карту с сервера НАСА.

    [Z1, R1] = wmsread(srtmplus, 'Latlim', latlim, ...
       'Lonlim', lonlim, 'ImageFormat', imageFormat, ...
       'CellSize', samplesPerInterval);
    
  6. Создайте окно фигуры и настройте карту оси с географическими пределами, которые совпадают с желаемыми пределами. Объект растровой привязки R1 связывает внутренние координаты растровой карты к EPSG:4326 географическая система координат. Создайте палитру, подходящую для данных о вертикальном изменении. Затем отображение и контур карта на уровне моря (0 м).

    figure
    worldmap(Z1, R1)
    geoshow(Z1, R1, 'DisplayType', 'texturemap')
    demcmap(double(Z1))
    contourm(double(Z1), R1, [0 0], 'Color', 'black')
    colorbar
    title ({'Gulf of Maine', srtmplus.LayerTitle}, 'Interpreter','none')
    

  7. Сравните слой NASA WorldWind SRTM30 Plus с SRTM30 с Батиметрией (900 м), объединенных с SRTM3 V4.1 (90 м) и АСГСОМ НЕДОМ (30 м) (mergedSrtm) слой.

    mergedSrtm = wldwind.refine('mergedSrtm');
  8. Запросите карту с сервера НАСА WorldWind.

    [Z2, R2] = wmsread(mergedSrtm, 'Latlim', latlim, 'Lonlim', lonlim, ...
        'CellSize', samplesPerInterval, 'ImageFormat', 'image/bil');
    
  9. Отобразите данные.

    figure
    worldmap(Z2, R2)
    geoshow(Z2, R2, 'DisplayType', 'texturemap')
    demcmap(double(Z2))	
    contourm(double(Z2), R2, [0 0], 'Color', 'black')
    colorbar
    title ({'Gulf of Maine', mergedSrtm.LayerTitle})
    

  10. Сравнение результатов.

    disp(newline + "SRTM30 Plus - " + srtmplus.LayerName ...
    + newline + "Minimum value: " + min(Z1(:))...
    + newline + "Maximum value: " + max(Z1(:)))
    disp(newline + "SRTM30 Plus Merged - " + mergedSrtm.LayerName ...
    + newline + "Minimum value: " + min(Z2(:))...
    + newline + "Maximum value: " + max(Z2(:)))
  11. Выход появляется следующим:

    SRTM30 Plus - srtm30 
    Minimum value: -4543
    Maximum value: 1463
    
    Merged SRTM30 Plus - mergedSrtm
    Minimum value: -4543 
    Maximum value: 1463
    

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

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

  1. Получите слои интереса.

    ortho = wmsfind('/USGSImageryTopo/','SearchField','serverurl'); 
    
    layers = wmsfind('data.worldwind', 'SearchField', 'serverurl');
    us_ned = layers.refine('usgs ned 30');
    
  2. Присвойте географическую степень и размер изображения.

    latlim = [36 36.23];
    lonlim = [-113.36 -113.13];
    imageHeight = 575;
    imageWidth = 575;
    
  3. Считайте ortho слой.

    A = wmsread(ortho, 'Latlim', latlim, 'Lonlim', lonlim, ...
       'ImageHeight', imageHeight, 'ImageWidth', imageWidth);
    
  4. Считайте us_ned USGS слой.

    [Z, R] = wmsread(us_ned, 'ImageFormat', 'image/bil', ...
        'Latlim', latlim, 'Lonlim', lonlim, ...
        'ImageHeight', imageHeight, 'ImageWidth', imageWidth);
    
  5. Драпируйте орторектифицированное изображение на данные о вертикальном изменении.

    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
    

  6. Присвойте параметры камеры.

    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];
  7. Установите камеру и легкие параметры.

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

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

| |

Похожие темы

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