Наложите несколько слоев

Создайте комбинированную карту нескольких слоев с одного сервера

Спецификация WMS позволяет серверу объединять несколько слоев в одну растровую карту. Сервер Метакарты VMAP0 содержит много слоев данных, таких как береговые линии, национальные контуры, океан и земля. Считайте и отобразите составной объект нескольких слоев с сервера VMAP0. Представленная карта имеет пространственное разрешение 0,5 градусов на ячейку.

  1. Найдите и обновите слои VMAP0.

    vmap0 = wmsfind('vmap0.tiles', 'SearchField', 'serverurl');
    vmap0 = wmsupdate(vmap0);
    
  2. Создайте массив нескольких слоев, которые включают землю и океан, береговые линии и национальные контуры.

    layers = [refine(vmap0, 'coastline_01'); ...
              refine(vmap0, 'country_01'); ...
              refine(vmap0, 'ground_01'); ...
              refine(vmap0, 'inwater'); ...
              refine(vmap0, 'ocean')];
    
  3. Получите комбинированную карту. Запросите размер ячейки.5 градусов путем устанавливания параметров высоты изображения и ширины изображения. Установите 'Очевидный' для истины так, чтобы все пиксели, не представляющие функции или значения данных в слое, были установлены в прозрачное значение в получившемся изображении, позволив произвести комбинированную карту.

    [overlayImage, R] = wmsread(layers, 'Transparent', true, ...
                                'ImageHeight', 360, 'ImageWidth', 720);
    
  4. Отобразите свою комбинированную карту.

    figure
    worldmap('world')
    geoshow(overlayImage, R);
    title('Composite of VMAP0 Layers')
    

Объедините слои с одного сервера с данными из других источников

Этот пример иллюстрирует, как можно объединить растровую карту контуров с векторными данными.

  1. Размещение глобальный растр с 1/2-degree ячейками. Задайте столбцы рабочий север на юг для непротиворечивости с wmsread.

    latlim = [-90 90];
    lonlim = [-180 180];
    cellExtent = 1/2;
    R = georefcells(latlim,lonlim,  ...
        cellExtent,cellExtent,'ColumnsStartFrom','north')
    
  2. Считайте файл форм полигона landareas и преобразуйте его в растровую карту.

    land = shaperead('landareas', 'UseGeoCoords', true);
    lat = [land.Lat];
    lon = [land.Lon];
    land = vec2mtx(lat, lon, zeros(R.RasterSize),R, 'filled');
    
  3. Считайте файл форм ломаной линии worldrivers и преобразуйте его в растровую карту.

    riverLines = shaperead('worldrivers.shp','UseGeoCoords',true);
    rivers = vec2mtx([riverLines.Lat], [riverLines.Lon], land, R);
    
  4. Объедините реки с землей.

    merged = land;
    merged(rivers == 1) = 3;
    
  5. Получите изображение контуров из сервера VMAP0.

    vmap0 = wmsfind('vmap0.tiles', 'SearchField', 'serverurl');
    vmap0 = wmsupdate(vmap0);
    layer = refine(vmap0, 'country_01');
    height = R.RasterSize(1);
    width  = R.RasterSize(2);
    [boundaries,boundariesR] = wmsread(layer, 'ImageFormat', 'image/png', ...
        'ImageHeight', height, 'ImageWidth', width);
    
  6. Подтвердите, что контуры и объединенные растры являются совпадающими.

    isequal(boundariesR,R)
    
  7. Объедините реки и землю с контурами.

    index = boundaries(:,:,1) ~= 255 ...
        & boundaries(:,:,2) ~= 255 ...
        & boundaries(:,:,3) ~= 255;
    merged(index) = 1;
    
  8. Отобразите результат.

    figure
    worldmap(merged, R)
    geoshow(merged, R, 'DisplayType', 'texturemap')
    colormap([.45 .60 .30; 0 0 0; 0 0.5 1; 0 0 1])

Драпируйте слои топографии и ортоформирования изображений по цифровому слою модели повышения

  1. Распакуйте zip-файл и считайте его с функцией usgs24kdem. Установите географические пределы к минимальным и максимальным значениям в файле DEM.

    filenames = gunzip('sanfranciscos.dem.gz', tempdir);
    demFilename = filenames{1};
    [lat,lon,Z,header,profile] = usgs24kdem(demFilename, 1);
    delete(demFilename);
    Z(Z==0) = -1;
    latlim = [min(lat(:)) max(lat(:))];
    lonlim = [min(lon(:)) max(lon(:))];
  2. Отобразите USGS 24K данные DEM. Создайте оси карты для Соединенных Штатов и присвойте соответствующую палитру повышения. Используйте daspectm, чтобы отобразить данные о повышении.

    figure
    usamap(latlim, lonlim)
    geoshow(lat, lon, Z, 'DisplayType','surface')
    demcmap(Z)
    daspectm('m',1)
    title('San Francisco South 24K DEM');

  3. Установите точку зрения путем корректировки CameraPosition, CameraTarget и свойств осей CameraAngle.

    cameraPosition = [87907 4.4313e+06 53103];
    cameraTarget = [-1961.5 4.492e+06 231.46];
    cameraAngle = 5.57428;
    set(gca,'CameraPosition', cameraPosition, ...
        'CameraTarget', cameraTarget, ...
        'CameraViewAngle', cameraAngle)

  4. Национальная Карта USGS обеспечивает ортоформирование изображений и топографические карты из различных областей Соединенных Штатов. Один метод, чтобы получить имя слоя ортоформирования изображений с высоким разрешением должен получить документ возможностей из сервера. Слой ортоформирования изображений является единственным слоем с этого сервера. Используйте несколько попыток соединиться с сервером в случае, если это занято.

    numberOfAttempts = 5;
    attempt = 0;
    info = [];
    serverURL = 'http://basemap.nationalmap.gov/ArcGIS/services/USGSImageryOnly/MapServer/WMSServer?';
    while(isempty(info))
        try
            info = wmsinfo(serverURL);
            orthoLayer = info.Layer(1);
        catch e         
            attempt = attempt + 1;
            if attempt > numberOfAttempts
                throw(e);
            else
                fprintf('Attempting to connect to server:\n"%s"\n', serverURL)
            end        
        end
    end
  5. Используйте топографический основной слой карты USGS.

    topoLayer = wmsfind('/USGSImageryTopo/','SearchField','serverurl');
    
  6. Установите размер для требуемых изображений.

    imageHeight = size(Z,1)*3;
    imageWidth  = size(Z,2)*3;
  7. Запросите карту слоя ортоформирования изображений.

    orthoImage = wmsread(orthoLayer, 'Latlim', latlim, 'Lonlim', lonlim, ...
        'ImageHeight', imageHeight, 'ImageWidth',  imageWidth);
  8. Запросите карту топографического слоя.

    topoMap = wmsread(topoLayer, 'Latlim', latlim, 'Lonlim', lonlim, ...
        'ImageHeight', imageHeight, 'ImageWidth',  imageWidth);
  9. Драпируйте ортоизображение на данные о повышении.

    figure
    usamap(latlim, lonlim)
    geoshow(lat, lon, Z, ...
        'DisplayType', 'surface', 'CData', orthoImage);
    daspectm('m',1)
    title('San Francisco Ortho-Image');
    axis vis3d
    set(gca,'CameraPosition', cameraPosition, ...
        'CameraTarget', cameraTarget, ...
        'CameraViewAngle', cameraAngle)

  10. Драпируйте топографическую карту на данные о повышении.

    figure
    usamap(latlim, lonlim)
    geoshow(lat, lon, Z, ...
        'DisplayType', 'surface', 'CData', topoMap);
    daspectm('m',1)
    title('San Francisco Topo Map');
    axis vis3d
    set(gca,'CameraPosition', cameraPosition, ...
        'CameraTarget', cameraTarget, ...
        'CameraViewAngle', cameraAngle)

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

| |

Похожие темы