Спецификация 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.
Считайте данные о вертикальном изменении и географическую ссылку регистраций для области вокруг Южного Пика Валуна в Колорадо. Обрежьте данные о вертикальном изменении к меньшей области с помощью 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, используемый в этом примере, от Геологической службы США.