Спецификация WMS позволяет серверу объединять несколько слоев в одну растровую карту. Сервер Метакарты VMAP0 содержит много слоев данных, таких как береговые линии, национальные контуры, океан и земля. Считайте и отобразите составной объект нескольких слоев с сервера VMAP0. Представленная карта имеет пространственное разрешение 0,5 градусов на ячейку.
Найдите и обновите слои 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')];
Получите комбинированную карту. Запросите размер ячейки.5 градусов путем устанавливания параметров высоты изображения и ширины изображения. Установите 'Очевидный' для истины так, чтобы все пиксели, не представляющие функции или значения данных в слое, были установлены в прозрачное значение в получившемся изображении, позволив произвести комбинированную карту.
[overlayImage, R] = wmsread(layers, 'Transparent', true, ... 'ImageHeight', 360, 'ImageWidth', 720);
Отобразите свою комбинированную карту.
figure worldmap('world') geoshow(overlayImage, R); title('Composite of VMAP0 Layers')
Этот пример иллюстрирует, как можно объединить растровую карту контуров с векторными данными.
Размещение глобальный растр с 1/2-degree ячейками. Задайте столбцы рабочий север на юг для непротиворечивости с wmsread
.
latlim = [-90 90]; lonlim = [-180 180]; cellExtent = 1/2; R = georefcells(latlim,lonlim, ... cellExtent,cellExtent,'ColumnsStartFrom','north')
Считайте файл форм полигона landareas
и преобразуйте его в растровую карту.
land = shaperead('landareas', 'UseGeoCoords', true); lat = [land.Lat]; lon = [land.Lon]; land = vec2mtx(lat, lon, zeros(R.RasterSize),R, 'filled');
Считайте файл форм ломаной линии worldrivers
и преобразуйте его в растровую карту.
riverLines = shaperead('worldrivers.shp','UseGeoCoords',true); rivers = vec2mtx([riverLines.Lat], [riverLines.Lon], land, R);
Объедините реки с землей.
merged = land; merged(rivers == 1) = 3;
Получите изображение контуров из сервера 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)
Объедините реки и землю с контурами.
index = boundaries(:,:,1) ~= 255 ... & boundaries(:,:,2) ~= 255 ... & boundaries(:,:,3) ~= 255; merged(index) = 1;
Отобразите результат.
figure worldmap(merged, R) geoshow(merged, R, 'DisplayType', 'texturemap') colormap([.45 .60 .30; 0 0 0; 0 0.5 1; 0 0 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(:))];
Отобразите 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');
Установите точку зрения путем корректировки 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)
Национальная Карта 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
Используйте топографический основной слой карты USGS.
topoLayer = wmsfind('/USGSImageryTopo/','SearchField','serverurl');
Установите размер для требуемых изображений.
imageHeight = size(Z,1)*3; imageWidth = size(Z,2)*3;
Запросите карту слоя ортоформирования изображений.
orthoImage = wmsread(orthoLayer, 'Latlim', latlim, 'Lonlim', lonlim, ... 'ImageHeight', imageHeight, 'ImageWidth', imageWidth);
Запросите карту топографического слоя.
topoMap = wmsread(topoLayer, 'Latlim', latlim, 'Lonlim', lonlim, ... 'ImageHeight', imageHeight, 'ImageWidth', imageWidth);
Драпируйте ортоизображение на данные о повышении.
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)
Драпируйте топографическую карту на данные о повышении.
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)