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

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

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

Ищите Базу данных WMS слои VMAP0. Синхронизируйте слои, которые вы нашли с сервером.

vmap0 = wmsfind('vmap0.tiles','SearchField','serverurl');
vmap0 = wmsupdate(vmap0);

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

layers = [refine(vmap0,'coastline_01'); ...
          refine(vmap0,'country_01'); ...
          refine(vmap0,'ground_01'); ...
          refine(vmap0,'inwater'); ...
          refine(vmap0,'ocean')];

Получите комбинированную карту. Запросите размер ячейки 0,5 градусов путем устанавливания параметров высоты изображения и ширины изображения. Установите Transparent к истине так, чтобы все пиксели, не представляющие функции или значения данных в слое, были установлены в прозрачное значение в получившемся изображении, позволив произвести комбинированную карту.

[overlayImage,R] = wmsread(layers,'Transparent',true, ...
                            'ImageHeight',360,'ImageWidth',720);

Отобразите комбинированную карту.

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

Данные, используемые в этом примере, от Metacarta.

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

В этом примере показано, как объединить растровую карту контуров с векторными данными.

Задайте глобальный растр с ячейками с 0.5 степенями при помощи georefcells функция. Задайте столбцы рабочий север на юг для непротиворечивости с wmsread. Результат R географический объект растровой привязки.

latlim = [-90 90];
lonlim = [-180 180];
cellExtent = 0.5;
R = georefcells(latlim,lonlim,  ...
    cellExtent,cellExtent,'ColumnsStartFrom','north');

Считайте файл форм, который содержит глобальные многоугольники контактной площадки, и преобразуйте его в растровую карту.

land = shaperead('landareas.shp','UseGeoCoords',true);
lat = [land.Lat];
lon = [land.Lon];
land = vec2mtx(lat,lon,zeros(R.RasterSize),R,'filled');

Считайте файл форм, который содержит мировые речные ломаные линии, и преобразуйте его в растровую карту.

riverLines = shaperead('worldrivers.shp','UseGeoCoords',true);
rivers = vec2mtx([riverLines.Lat],[riverLines.Lon],land,R);

Объедините реки с землей.

merged = land;
merged(rivers == 1) = 3;

Получите информацию системы координат из файла форм контактных площадок при помощи shapeinfo функция. Мировой файл форм рек использует ту же систему координат. Установите GeographicCRS свойство ссылочного объекта.

info = shapeinfo('landareas.shp');
R.GeographicCRS = info.CoordinateReferenceSystem;

Считайте изображение контуров из сервера 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);

Подтвердите, что контуры и объединенные растры являются совпадающими.

isequal(boundariesR,R)
ans = logical
   1

Объедините реки и землю с контурами.

index = boundaries(:,:,1) ~= 255 ...
    & boundaries(:,:,2) ~= 255 ...
    & boundaries(:,:,3) ~= 255;
merged(index) = 1;

Отобразите результат.

figure
worldmap(merged,R)
geoshow(merged,R,'DisplayType','texturemap')
colormap([0.45 0.60 0.30; 0 0 0; 0 0.5 1; 0 0 1])

Данные, используемые в этом примере, являются из США Национальной Геопространственной Спецслужбой (NGA) и Metacarta.

Драпируйте ортоформирование изображений по 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, используемый в этом примере, от Геологической службы США.

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

| |

Похожие темы

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