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

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

Спецификация WMS позволяет серверу объединять несколько слоев в одну растровую карту. Сервер MetaCarta 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 ячейками при помощи georefcells функция. Задайте столбцы рабочий север на юг для непротиворечивости с wmsread. Результат R географический объект растровой привязки.

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

    land = shaperead('landareas.shp', '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. Получите информацию системы координат от landareas файл форм с помощью shapeinfo функция. worldrivers файл форм использует ту же систему координат. Установите GeographicCRS свойство ссылочного объекта.

    info = shapeinfo('landareas.shp');
    R.GeographicCRS = info.CoordinateReferenceSystem;
  6. Получите изображение контуров из сервера 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);
    
  7. Подтвердите, что контуры и объединенные растры являются совпадающими.

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

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

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

Драпируйте ортоформирование изображений по DEM

Считайте данные о вертикальном изменении и географическую ссылку регистраций для области вокруг Южного Пика Валуна в Колорадо. Затем обрежьте данные о вертикальном изменении к меньшей области с помощью geocrop.

[fullZ,fullR] = readgeoraster('n39_w106_3arc_v2.dt1','OutputType','double');

latlim = [39.25 40.0];
lonlim = [-106 -105.5];
[Z,R] = geocrop(fullZ,fullR,latlim,lonlim);

Отобразите данные о вертикальном изменении. Для этого создайте набор осей карты для Соединенных Штатов, отобразите данные на графике как поверхность и примените соответствующую палитру. Просмотрите карту в 3-D путем корректировки положения камеры и цели. Установите вертикальное преувеличение с помощью daspectm.

figure
usamap(R.LatitudeLimits, R.LongitudeLimits)
geoshow(Z,R,'DisplayType','surface')
demcmap(Z)
title('Elevation');

cameraPosition = [218100 4367600 183700];
cameraTarget = [0 4754200 2500];
set(gca,'CameraPosition', cameraPosition, ...
        'CameraTarget', cameraTarget)
daspectm('m',3)

Драпируйте ортоизображение по данным о вертикальном изменении. Для этого сначала получите имена слоев ортоформирования изображений с высоким разрешением из Национальной Карты USGS с помощью wmsinfo. В этом случае слой ортоформирования изображений является единственным слоем с сервера. Используйте несколько попыток связать с сервером в случае, если это занято.

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

Запросите карту слоя ортоформирования изображений с помощью wmsread. Чтобы отобразить ортоформирование изображений, используйте geoshow и набор CData свойство к слою.

imageHeight = size(Z,1);
imageWidth  = size(Z,2);

orthoImage = wmsread(orthoLayer,'Latlim',R.LatitudeLimits, ...
    'Lonlim',R.LongitudeLimits,'ImageHeight', imageHeight, ...
    'ImageWidth',  imageWidth);

figure
usamap(R.LatitudeLimits,R.LongitudeLimits)
geoshow(Z,R,'DisplayType','surface','CData',orthoImage);
title('Orthoimage Draped Over Elevation');
set(gca,'CameraPosition', cameraPosition, ...
        'CameraTarget', cameraTarget)
daspectm('m',3)

Файл DTED, используемый в этом примере, является любезностью Геологической службы США.

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

| |

Похожие темы

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