Получите свою карту

Сопоставьте методы поиска

Чтобы получить карту из сервера WMS, используйте функциональный wmsread или, в нескольких определенных ситуациях, методе WebMapServer.getMap. Используйте метод getMap когда:

  • Работа с non-EPSG:4326 ссылочными системами

  • Создание анимации определенной географической области в зависимости от времени

  • Получение нескольких слоев с сервера WMS

В большинстве случаев используйте wmsread, чтобы получить вашу карту. Чтобы использовать wmsread, укажите, что или объект WMSLayer или карта запрашивают URL. Получите объект WMSLayer при помощи wmsfind, чтобы искать Базу данных WMS. Получите запрос карты URL из:

  • Вывод wmsread

  • Свойство RequestURL объекта WMSMapRequest

  • Интернет-поиск

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

Поймите координатные ссылочные системные коды

При использовании wmsread запросите карту, которая использует координату EPSG:4326 ссылочная система. EPSG обозначает European Petroleum Survey Group. Эта группа, организация специалистов, работающих в области нефтеразведки, разработала базу данных координатных ссылочных систем. Координатные ссылочные системы идентифицируют положение однозначно. Координатные ссылочные системные коды являются числами, которые обозначают определенные координатные ссылочные системы.

EPSG:4326 основан на 1 984 Мировых Геодезических Системах (WGS84) данная величина и система координат широты и долготы с углами в градусах и Гринвичем как центральный меридиан. Все серверы в Базе данных WMS, и по-видимому все серверы WMS в целом, используют ссылочную систему EPSG:4326. Эта система является требованием спецификации OGC® WMS. Если слой не использует EPSG:4326, программное обеспечение Mapping Toolbox™ использует следующий доступный координатный ссылочный системный код. Mapping Toolbox не поддерживает автоматические координатные ссылочные системы (системы, в которых пользователь выбирает центр проекции). Для получения дополнительной информации о координатных ссылочных системных кодах, смотрите Пространственный Ссылочный веб-сайт.

Получите Свою Карту с wmsread

Слой Blue Marble Next Generation НАСА показывает поверхность Земли в течение каждого месяца 2 004 в высоком разрешении (500 метров/пиксель). Считайте и отобразите слой Blue Marble Next Generation.

  1. Ищите Базу данных WMS все слои с 'nasa' в поле ServerURL.

    nasa = wmsfind('nasa', 'SearchField', 'serverurl');
    
  2. Используйте метод WMSLayer.refine, чтобы совершенствовать ваш поиск, чтобы включать только те слои с фразой 'bluemarbleng' в поле LayerName. Этот синтаксис создает точный поиск.

    layer = nasa.refine('bluemarbleng',  'SearchField', 'layername', ...
       'MatchType', 'exact');
    
  3. Используйте функцию wmsread, чтобы получить слой Blue Marble Next Generation.

    [A, R] = wmsread(layer);
    

    Функция wmsread возвращает A, растровую карту, на которую географически ссылаются, и R, растровая ссылка возражает, что связывает A с географической системой координат EPSG:4326. Географические пределы A охватывают полную степень широты и долготы layer.

  4. Создайте окно фигуры, настройте свои оси карты и отобразите вашу карту.

    figure
    axesm globe
    axis off
    geoshow(A, R)
    title('Blue Marble: Next Generation')

Используйте wmsread с Дополнительными Параметрами

Функция wmsread позволяет вам устанавливать много дополнительных параметров, таких как высота изображения и ширина и цвет фона. Этот пример демонстрирует, как просмотреть карту повышения в разрешении с 0.5 степенями путем изменения размера ячейки, и как отобразить океан голубого цвета путем выбирания цвета фона. Для полного списка параметров смотрите wmsread.

  1. Ищите базу данных WMS слои, которые содержат foundation.gtopo30 в поле LayerName. GTOPO30, цифровая модель повышения, разработанная Геологической службой США (USGS), имеет интервал сетки по горизонтали 30 секунд дуги.

    gtopo30Layer = wmsfind('foundation.gtopo30');
    
  2. Задайте цвет фона, задав красные, зеленые, и синие уровни.

    oceanColor = [0 170 255];
    
  3. Используйте BackgroundColor и параметры CellSize функции wmsread, чтобы выбрать цвет фона и размер ячейки вашей полученной карты.

    cellSize = 0.5;
    [A,R] = wmsread(gtopo30Layer, 'BackgroundColor', oceanColor, ...
        'CellSize', cellSize);
    
  4. Создайте окно фигуры и настройте мировую карту оси. Отобразите свою карту с заголовком.

    figure
    worldmap world
    geoshow(A, R)
    title({'GTOPO30 Elevation Model', gtopo30Layer.LayerTitle})
    

Добавьте легенду в свою карту

Сервер WMS представляет слой как изображение. Без соответствующей легенды, интерпретируя пиксельные цвета может быть трудным. Некоторые серверы WMS обеспечивают доступ к изображению легенды для конкретного слоя через URL, который появляется в поле Details.Style.LegendURL слоя. (См. страницу с описанием WMSLayer.Details для получения дополнительной информации.)

Несмотря на то, что легенда предоставляет ценную информацию, чтобы помочь интерпретировать цвета пикселя изображения, только приблизительно 45% серверов в базе данных WMS содержат по крайней мере один слой с доступной легендой. Меньше чем 10% слоев в базе данных WMS содержат легенду, но почти 80% слоев в базе данных находятся на сервере columbo.nrlssci.navy.mil. Этот сервер всегда имеет пустые поля LegendURL. Вы не можете использовать wmsfind, чтобы искать только слои с легендами, потому что база данных не хранит этот уровень детализации. Необходимо обновить слой с сервера, прежде чем можно будет получить доступ к полю LegendURL.

Этот пример демонстрирует, как создать карту температуры поверхности, и затем получить и отобразить связанное изображение легенды:

  1. Ищите слои от Космического полета Годдарда НАСА Сервер SVS Изображений. Этот сервер содержит слои, которые имеют изображения легенды. Можно сказать, что изображения легенды доступны, потому что слои имеют содержимое в поле LegendURL.

    layers = wmsfind('svs.gsfc.nasa.gov', 'SearchField', 'serverurl');
    serverURL = layers(1).ServerURL;
    gsfc = wmsinfo(serverURL);
    
  2. Найдите слой, содержащий городские температурные подписи, и отобразите краткий обзор:

    urban_temperature = gsfc.Layer.refine('urban*temperature');
    disp(urban_temperature.Abstract)
    
    Big cities influence the environment around them. For example,
    urban areas are typically warmer than their surroundings.
    Cities are strikingly visible in computer models that simulate
    the Earth's land surface. This visualization shows average 
    surface temperature predicted by the Land Information System (LIS)
    for a day in June 2001. Only part of the global computation
    is shown, focusing on the highly urbanized northeast corridor
    in the United States, including the cities of Boston, New York,
    Philadelphia, Baltimore, and Washington.
    
    Additional Credit:
    NASA GSFC Land Information System (http://lis.gsfc.nasa.gov/)
  3. Считайте и отобразите слой. Карта появляется с различными цветами в различных областях, но без легенды не ясно, что представляют эти цвета.

    [A,R] = wmsread(urban_temperature);
    figure
    usamap(A,R)
    geoshow(A,R)
    title('Urban Temperature Signatures')
    axis off
    

  4. Исследуйте поле Details слоя urban_temperature. Этот слой имеет только одну структуру в поле Style. Поле Style определяет, как сервер представляет слой.

    urban_temperature.Details
    ans = 
    
      struct with fields:
    
         MetadataURL: 'http://svs.gsfc.nasa.gov/vis/a000000/a003100/a003152/a003152.fgdc'
          Attributes: [1x1 struct]
         BoundingBox: [1x1 struct]
           Dimension: [1x1 struct]
        ImageFormats: {'image/png'}
         ScaleLimits: [1x1 struct]
               Style: [1x1 struct]
             Version: '1.3.0'

    Отобразите поле Style в Командном окне:

    urban_temperature.Details.Style
    ans = 
    
            Title: 'Opaque'
             Name: 'opaque'
         Abstract: [1x319 char]
        LegendURL: [1x1 struct]

    Каждый элемент Style имеет только один LegendURL. Исследуйте LegendURL:

    urban_temperature.Details.Style.LegendURL
    ans = 
    
        OnlineResource: [1x65 char]
                Format: 'image/png'
                Height: 90
                 Width: 320
  5. Загрузите легенду URL:

    url = urban_temperature.Details.Style.LegendURL.OnlineResource
    

    URL появляется в командном окне:

    url =
    
    http://svs.gsfc.nasa.gov/vis/a000000/a003100/a003152/temp_bar.png
    
  6. Отобразите изображение легенды с помощью команды image и установите свойства, такие, что изображение отображается с непосредственным, разрешением экрана к пикселю. Эта легенда является просто изображением шкалы палитры - не легенда в графике MATLAB®.

    temperatureLegend = webread(url);
    figure('Color','white')
    axis off image
    set(gca,'units','pixels','position',...
    [0 0 size(temperatureLegend,2) size(temperatureLegend,1)]);
    pos = get(gcf,'position');
    set(gcf,'position',...
    [pos(1) pos(2) size(temperatureLegend,2) size(temperatureLegend,1)]);
    image(temperatureLegend)
    

    Теперь карта имеет больше смысла. Области к красному концу спектра теплее.

  7. Шаги 7-10 демонстрируют, как получить вывод из карты, структурируют и добавляют легенду. Путем добавления легенды этим способом вы стараетесь не деформировать текст в изображении легенды. (Текст легенды деформируется, если вы отображаете изображение с geoshow.)

    Сначала установите свои пределы широты и долготы совпадать с пределами вашей карты и чтения в файле форм с мировыми городскими данными:

    [latlim,lonlim] = limitm(A,R);
    S = shaperead('worldcities', 'UseGeoCoords',true,...
        'BoundingBox',[lonlim(1) latlim(1);lonlim(2) latlim(2)]);
    
  8. Определите положение окна текущей фигуры. Отличайтесь pos(1) и pos(2) параметры 'Position' по мере необходимости на основе разрешения вашего экрана.

    colValue = [1 1 1];
    dimension = size(A,1)/2;
    figure
    set(gcf,'Color',[1,1,1])
    pos = get(gcf, 'Position');
    set(gcf, 'Position', [pos(1) pos(2) dimension dimension])
    
  9. Отобразите карту и добавьте городские маркеры, государственные границы, меридиан и найдите что-либо подобное меткам, заголовку и Северной стрелке:

    usamap(A,R)
    geoshow(A,R)
    geoshow(S, 'MarkerEdgeColor', colValue, 'Color', colValue)
    
    geoshow('usastatehi.shp', 'FaceColor', 'none',...
       'EdgeColor','black')
    mlabel('FontWeight','bold')
    plabel('FontWeight','bold')
    axis off
    title('Urban Temperature Signatures', 'FontWeight', 'bold')
    
    for k=1:numel(S)
       textm(S(k).Lat, S(k).Lon, S(k).Name, 'Color', colValue,...
           'FontWeight','bold')
    end
    
    lat = 36.249;
    lon = -71.173;
    northarrow('Facecolor', colValue, 'EdgeColor', colValue,...
        'Latitude', lat, 'Longitude', lon);
    

  10. Отобразите карту и легенду как одно, объединенное изображение:

    f = getframe(gcf);
    legendImg = uint8(255*ones(size(temperatureLegend,1), size(f.cdata,2), 3));
    offset = dimension/2;
    halfSize = size(temperatureLegend, 2)/2;
    legendImg(:,offset-halfSize:offset+halfSize-1,:) = temperatureLegend;
    combined = [f.cdata; legendImg];
    figure
    pos = get(gcf,'position');
    set(gcf,'position',[10 100 size(combined,2) size(combined,1)])
    set(gca,'units','normalized','position', ...
       [0 0 1 1]);
    image(combined)
    axis off image
    

  11. Другой способ отобразить карту и легенду вместе состоит в том, чтобы записать легенду в карту в заданном местоположении. Чтобы просмотреть изображение, используйте команду image, устанавливая параметры положения, таким образом, что существует непосредственный пиксель к разрешению экрана. (Текст легенды деформируется, если изображение отображено с geoshow.)

    A_legend = A;
    A_legend(end-size(temperatureLegend,1):end-1,...
       end-size(temperatureLegend,2):end-1,:) = temperatureLegend;
    figure
    image(A_legend)
    axis off image
    set(gca,'Units','normalized','position',...
       [0 0 1 1]);
    set(gcf,'Position',[10 100 size(A_legend,2) size(A_legend,1)]);
    title('Urban Temperature Signatures', 'FontWeight', 'bold')
    
  12. Объедините карту и легенду в одном файле, и затем опубликуйте его к сети. Сначала запишите изображения в файл:

    mkdir('html')
    imwrite(A_legend, 'html/wms_legend.png')
    imwrite(combined, 'html/combined.png')
    

    Откройте редактора MATLAB и вставку в этом коде:

    %%
    % <<wms_legend.png>>
    
    %%
    % <<combined.png>>

    Добавьте любой другой текст, который вы хотите включать в свой опубликованный документ. Затем выберите одну из ячеек и выберите File> Save File and Publish из меню.

Получите свою карту с WebMapServer.getMap

Метод WebMapServer.getMap позволяет, вы, чтобы получить карты в любом правильно задали координату EPSG ссылочная система. Если вы хотите получить карту в ссылочной системе EPSG:4326, можно использовать wmsread. Если вы хотите получить слой, координаты которого не находятся в ссылочной системе EPSG:4326, однако, необходимо использовать объект WMSMapRequest создать запрос URL и метод WebMapServer.getMap, чтобы получить карту. Этот пример демонстрирует, как создать карты в "сети Меркаторские" координаты с помощью объектов WebMapServer и WMSMapRequest. Сеть Меркаторская система координат обычно используется веб-приложениями.

Национальная Карта USGS обеспечивает ортоформирование изображений и карты топографии из различных областей Соединенных Штатов. Сервер обеспечивает данные и в EPSG:4326 и в сети Меркаторские координаты, как задано кодами EPSG:102113, EPSG:3857 EPSG. Для получения дополнительной информации об этих кодах, смотрите Пространственный Ссылочный веб-сайт.

  1. Получите географические координаты, которые являются случайными с изображением в файле boston.tif.

    filename = 'boston.tif';
    proj = geotiffinfo(filename);
    cornerLat = [proj.CornerCoords.Lat];
    cornerLon = [proj.CornerCoords.Lon];
    latlim = [min(cornerLat) max(cornerLat)];
    lonlim = [min(cornerLon) max(cornerLon)];
  2. Преобразуйте географические пределы Меркаторской сети. Система координат EPSG:3857, обычно известен как "сеть, Меркаторскую", или "Сферическая Меркаторская система координат проекции". Эта система использует полуглавную длину оси WGS84 (в метрах), но устанавливает полунезначительную длину оси на 0. Чтобы получить формирование изображений в этой координатной ссылочной системе, необходимо использовать WMSMapRequest и WebMapServer, поскольку wmsread только запрашивает данные в системе EPSG:4326.

    mstruct = defaultm('mercator');
    mstruct.origin = [0 0 0];
    mstruct.maplatlimit = latlim;
    mstruct.maplonlimit = lonlim;
    wgs84 = wgs84Ellipsoid;
    mstruct.geoid = [wgs84.SemimajorAxis 0 ];
    mstruct = defaultm(mstruct);
    
    [x,y] = mfwdtran(mstruct, latlim, lonlim);
    xlimits = [min(x) max(x)];
    ylimits = [min(y) max(y)];
  3. Вычислите значения высоты изображения и ширины для объема выборки 5 метров.

    metersPerSample = 5;
    imageHeight = round(diff(ylimits)/metersPerSample);
    imageWidth  = round(diff(xlimits)/metersPerSample);
    
  4. Повторно вычислите новые пределы.

    yLim = [ylimits(1), ylimits(1) + imageHeight*metersPerSample];
    xLim = [xlimits(1), xlimits(1) + imageWidth*metersPerSample];
  5. Найдите Национальную Карту USGS от базы данных WMS и выберите слой Digital Ortho-Quadrangle.

    doqLayer = wmsfind('usgsnaipplus','SearchField','serverurl'); 
    doqLayer = doqLayer(1);
  6. Создайте объекты WMSMapRequest и WebMapServer.

    server  = WebMapServer(doqLayer.ServerURL);
    numberOfAttempts = 50;
    attempt = 0;
    request = [];
    while(isempty(request))
        try
            request = WMSMapRequest(doqLayer, server);
        catch e 
            attempt = attempt + 1;
            fprintf('%d\n', attempt)
            if attempt > numberOfAttempts
                throw(e)
            end
        end
    end
    
  7. Используйте свойства WMSMapRequest изменить различные аспекты вашего запроса карты, такие как карта ограничивает, размер изображения и координатный ссылочный системный код. Установите пределы карты, чтобы покрыть ту же область, как найдено в файле boston.tif.

    request.CoordRefSysCode = 'EPSG:3857';
    request.ImageHeight = imageHeight;
    request.ImageWidth  = imageWidth;
    request.XLim = xLim;
    request.YLim = yLim;
  8. Запросите карту ортоформирования изображений в сети Меркаторские координаты.

    A_PCS = getMap(server, request.RequestURL);
    R_PCS = request.RasterReference;
  9. Получите карту для той же области, но в координатах EPSG:4326.

    request.CoordRefSysCode = 'EPSG:4326';
    request.Latlim = latlim;
    request.Lonlim = lonlim;
    A_Geo = getMap(server, request.RequestURL);
    R_Geo = request.RasterReference;
  10. Читайте в Бостонских названиях места из файла форм и наложите их сверху карт. Преобразуйте координаты функций к сети Меркаторские и географические координаты. Координаты точки в файле форм исчисляются в метрах и Координаты на плоскости состояния Массачусетса, но проекция GeoTIFF задана в ногах обзора.

    S = shaperead('boston_placenames');
    x = [S.X]*unitsratio('sf','meter');
    y = [S.Y]*unitsratio('sf','meter');
    names = {S.NAME};
    [lat, lon] = projinv(proj, x, y);
    [xPCS, yPCS] = mfwdtran(mstruct, lat, lon);
  11. Проект и отображение ортоформирование изображений, полученное в использовании координат EPSG:4326, геопоказывают.

    mstruct.geoid = wgs84;
    mstruct = defaultm(mstruct);
    
    figure
    axesm(mstruct)
    geoshow(A_Geo,R_Geo)
    textm(lat, lon, names, 'Color',[0 0 0], ...
        'BackgroundColor',[0.9 0.9 0],'FontSize',6);
    axis tight
    title({'USGS Digital Ortho-Quadrangle - Boston', ...
        'Geographic Layer'})

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

    figure
    mapshow(A_PCS, R_PCS);
    text(xPCS, yPCS, names, 'Color',[0 0 0], ...
        'BackgroundColor',[0.9 0.9 0],'FontSize',6,'Clipping','on');
    axis tight
    title({'USGS Digital Ortho-Quadrangle - Boston', 'Web Mercator Layer'})

  13. Отобразите изображение от boston.tif для сравнения.

    figure
    mapshow(filename)
    text(x, y, names, 'Color',[0 0 0], ...
        'BackgroundColor',[0.9 0.9 0],'FontSize',6,'Clipping','on');
    axis tight
    title({filename, proj.PCS})
    

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

| |

Похожие темы