exponenta event banner

Структуры географических данных

В примерах, приведенных в предыдущих главах, геоданные имели форму отдельных переменных. Программное обеспечение Mapping Toolbox™ также обеспечивает простые средства отображения, извлечения и манипулирования коллекциями элементов векторной карты, организованных в структурах географических данных.

Географическая структура данных - это структурный массив MATLAB ®, который имеет один элемент на географическую особенность. Каждый элемент представлен координатами и атрибутами. Географическая структура данных, которая содержит географические координаты (широту и долготу), называется геоструктом, а та, которая содержит картографические координаты (спроецированные x и y), называется mapstruct. Структуры географических данных содержат только векторные элементы и не могут использоваться для хранения растровых данных (регулярные или геоориентированные сетки данных или изображения).

Shapefiles

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

Файл формы хранит атрибуты и координаты в отдельных файлах; состоит из основного файла, индексного файла и файла xBASE. Все три файла имеют одно и то же базовое имя и отличаются расширениями .shp, .shx, и .dbfсоответственно. (Например, базовое имя 'concord_roads' имена файлов shapefile будут 'concord_roads.shp', 'concord_roads.shx', и 'concord_roads.dbf').

Содержание структур географических данных

shaperead функция считывает векторные элементы и атрибуты из файла формы и возвращает массив структуры географических данных. shaperead функция определяет имена полей атрибутов во время выполнения из таблицы shapefile xBASE или из необязательных пользовательских параметров. Если имя атрибута shapefile не может непосредственно использоваться в качестве имени поля, shaperead присваивает полю соответствующее измененное имя, обычно заменяя подчеркивания пробелами.

Поля в географической структуре данных

Имя поляТип данныхОписаниеКомментарии

Geometry

символьный вектор

Один из следующих типов фигур: 'Point', 'MultiPoint', 'Line', или 'Polygon'.

Для 'PolyLine', значение Geometry поле просто 'Line'.

BoundingBox

Числовой массив 2 на 2

Указывает минимальное и максимальное значения координат элемента в каждом размере в следующей форме:

[min (X) min (Y) max (X) max (Y)]

Пропущено для типа формы 'Point'.

X, Y, Lon, или Lat

1-by-N массив класса double

Вектор координат.

 

Attr

символьный вектор или скалярное число

Имя, тип и значение атрибута.

Необязательно. Обычно существует несколько атрибутов.

shaperead функция не поддерживает 3-D или «измеренные» типы формы: 'PointZ', 'PointM', 'MultipointZ', 'MultipointM', 'PolyLineZ', 'PolyLineM', 'PolygonZ', 'PolylineM', или 'Multipatch'. Также, хотя 'Null Shape' функции могут присутствовать в 'Point', 'Multipoint', 'PolyLine', или 'Polygon' shapefile, они игнорируются.

PolyLine и Polygon Формы

В структурах географических данных с Line или Polygon геометрия, отдельные элементы могут иметь несколько деталей - отсоединенные отрезки и многоугольные кольца. Детали могут включать внутренние кольца против часовой стрелки, которые перекрывают «отверстия». Иллюстрацию этого см. в разделе Создание и отображение полигонов. Каждая отсоединенная часть отделяется от следующей посредством NaN в пределах X и Y (или Lat и Lon) векторы. Вы можете использовать isShapeMultipart для определения наличия элементов, разделенных NaN.

Каждая многоточечная или отделенная NaN многоточечная линия или полигональная сущность составляет один элемент и, таким образом, имеет один вектор символа или скалярное двойное значение на поле атрибута. Невозможно назначить различные атрибуты различным частям такой функции; любой символьный вектор или числовой атрибут, импортированный с геоструктом или mapstruct (или добавленный в него впоследствии), применяется ко всем деталям элемента в комбинации.

Макроструктуры и геострукты

По умолчанию shaperead возвращает mapstruct, содержащий X и Y поля. Это необходимо, если координаты набора данных уже спроецированы (в картографической системе координат). В противном случае, если координаты набора данных не проецируются (в географической системе координат), используйте пару параметр-значение 'UseGeoCoords',true сделать shaperead вернуть геострукт, имеющий Lon и Lat поля.

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

  • Если файл формы содержит файл проекции (.prj), использовать shapeinfo для получения информации о системе координат. Если CoordinateReferenceSystem поле возвращаемой структуры является projcrs объект, у вас есть координаты карты. Если поле является geocrs объект, у вас есть географические координаты.

  • Если файл формы не содержит файл проекции, используйте shapeinfo для получения BoundingBox. Глядя на диапазоны координат, вы можете определить, какие координаты у вас есть.

  • Спросите поставщика данных.

geoshow отображает географические элементы, хранящиеся в геоструктах, и mapshow отображает географические элементы, хранящиеся в mapstructs. При попытке отобразить mapstruct с помощью geoshow, функция выдает предупреждение и вызывает mapshow. При попытке отображения геострукта с помощью mapshowфункция проецирует координаты с помощью проекции плит Carree и выдает предупреждение.

Изучение структуры географических данных

Вот пример нефильтрованного mapstruct, возвращаемого shaperead:

S = shaperead('concord_roads.shp')

Выходные данные выглядят следующим образом:

S = 
609x1 struct array with fields:
    Geometry
    BoundingBox
    X
    Y
    STREETNAME
    RT_NUMBER
    CLASS
    ADMIN_TYPE
    LENGTH

Файл формы содержит 609 признаков. В дополнение к Geometry, BoundingBoxи поля координат (X и Y), существует пять полей атрибутов: STREETNAME, RT_NUMBER, CLASS, ADMIN_TYPE, и LENGTH.

Посмотрите на 10-й элемент:

S(10)

Выходные данные выглядят следующим образом:

ans = 
       Geometry: 'Line'
    BoundingBox: [2x2 double]
              X: [1x9 double]
              Y: [1x9 double]
     STREETNAME: 'WRIGHT FARM'
      RT_NUMBER: ''
          CLASS: 5
     ADMIN_TYPE: 0
         LENGTH: 79.0347

Этот mapstruct содержит 'Line' функции. Десятая прямая имеет девять вершин. Значения первых двух атрибутов являются векторами символов. Второй - пустой символьный вектор. Последние три атрибута являются числовыми. По всем элементам S, X и Y может иметь различную длину, но STREETNAME и RT_NUMBER всегда должен содержать векторы символов, и CLASS, ADMIN_TYPE и LENGTH всегда должен содержать скалярные двойники.

В этом примере: shaperead возвращает нефильтрованный mapstruct. Если требуется отфильтровать некоторые атрибуты, см. дополнительные сведения в разделе Выбор данных Shapefile для чтения.

Построение структур географических данных

Функции, такие как shaperead или gshhs возвращают геострукты при импорте векторных геоданных. Однако в некоторых случаях может потребоваться создать геострукты или структуры самостоятельно. Например, можно импортировать векторные геоданные, которые не хранятся в файле формы (например, из MAT-файла, из электронной таблицы Microsoft ® Excel ® или путем чтения в текстовом файле с разделителями). Кроме того, можно вычислить векторные геоданные и атрибуты, вызвав различные функции MATLAB или Mapping Toolbox. В обоих случаях координаты и другие данные обычно являются векторами или матрицами в рабочей области. Пакетирование переменных в геострукт или mapstruct может облегчить их картирование и экспорт, поскольку структуры географических данных обеспечивают несколько преимуществ по сравнению с координатными массивами:

  • Все связанные переменные геоданных упаковываются в один контейнер, структурный массив.

  • Структура самостоятельно документирует имена полей.

  • Можно изменить символику карты для точек, линий и многоугольников в соответствии со значениями их атрибутов, создав символику для отображения геострукта или mapstruct.

  • Существует однозначное соответствие между структурными элементами и географическими элементами, которое распространяется на нижестоящие элементы hggroup объекты, построенные mapshow и geoshow.

Достичь этих выгод не трудно. Используйте следующий пример в качестве руководства по упаковке векторных геоданных, импортируемых или создаваемых в структуры географических данных.

Создание геоструктов точек и линий

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

  1. Начните с небольшого набора точечных данных, приблизительных широт и долгот для трех городов на трех континентах:

    latparis =  48.87084; lonparis =   2.41306;   % Paris coords
    latsant  = -33.36907; lonsant  = -70.82851;   % Santiago
    latnyc   =  40.69746; lonnyc   = -73.93008;   % New York City

  2. построить точечный геострукт; он должен иметь следующие обязательные поля:

    • Geometry (в данном случае 'Point')

    • Lat (для точек это скалярный двойник)

    • Lon (для точек это скалярный двойник)

    % The first field by convention is Geometry (dimensionality).
    % As Geometry is the same for all elements, assign it with deal:
    [Cities(1:3).Geometry] = deal('Point');
    
    % Add the latitudes and longitudes to the geostruct:
    Cities(1).Lat = latparis; Cities(1).Lon = lonparis;
    Cities(2).Lat = latsant;  Cities(2).Lon = lonsant;
    Cities(3).Lat = latnyc;   Cities(3).Lon = lonnyc;
    
    % Add city names as City fields. You can name optional fields 
    % anything you like other than Geometry, Lat, Lon, X, or Y.
    Cities(1).Name = 'Paris';
    Cities(2).Name = 'Santiago';
    Cities(3).Name = 'New York';
    % Inspect your completed geostruct and its first member
    Cities    
    
    Cities = 
    1x3 struct array with fields:
        Geometry
        Lat
        Lon
        Name
    
    Cities(1)
    
    ans = 
        Geometry: 'Point'
             Lat: 48.8708
             Lon: 2.4131
            Name: 'Paris'

  3. Отображение геострукта на проекции Меркатора сухопутных масс Земли, хранящихся в landareas.shp shapefile, установка границ карты для исключения полярных областей:

    axesm('mercator','grid','on','MapLatLimit',[-75 75]); tightmap; 
    % Map the geostruct with the continent outlines
    geoshow('landareas.shp')
    
    % Map the City locations with filled circular markers
    geoshow(Cities,'Marker','o',...
        'MarkerFaceColor','c','MarkerEdgeColor','k');
    
    % Display the city names using data in the geostruct field Name.
    % Note that you must treat the Name field as a cell array.
    textm([Cities(:).Lat],[Cities(:).Lon],...
        {Cities(:).Name},'FontWeight','bold');

  4. Затем постройте линейный геострукт, чтобы создать большой круг навигационных трасс между тремя городами:

    % Call the new geostruct Tracks and give it a line geometry:
    [Tracks(1:3).Geometry] = deal('Line');
    
    % Create a text field identifying kind of track each entry is.
    % Here they all will be great circles, identified as 'gc'
    % (character vector used by certain functions to signify great circle arcs)
    trackType = 'gc';
    [Tracks.Type] = deal(trackType);
    
    % Give each track an identifying name
    Tracks(1).Name = 'Paris-Santiago';
    [Tracks(1).Lat Tracks(1).Lon] = ...
            track2(trackType,latparis,lonparis,latsant,lonsant);
    
    Tracks(2).Name = 'Santiago-New York';
    [Tracks(2).Lat Tracks(2).Lon] = ...
            track2(trackType,latsant,lonsant,latnyc,lonnyc);
    
    Tracks(3).Name = 'New York-Paris';
    [Tracks(3).Lat Tracks(3).Lon] = ...
            track2(trackType,latnyc,lonnyc,latparis,lonparis);

  5. Вычислить длины дорожек большого круга:

    % The distance function computes distance and azimuth between
    % given points, in degrees. Store both in the geostruct.
    for j = 1:numel(Tracks)
        [dist az] = ...
            distance(trackType,Tracks(j).Lat(1),...
                               Tracks(j).Lon(1),...
                               Tracks(j).Lat(end),...
                               Tracks(j).Lon(end));
        [Tracks(j).Length] = dist;
        [Tracks(j).Azimuth] = az;
    end
    % Inspect the first member of the completed geostruct
    Tracks(1)
    
    ans = 
        Geometry: 'Line'
            Type: 'gc'
            Name: 'Paris-Santiago'
             Lat: [100x1 double]
             Lon: [100x1 double]
          Length: 104.8274
         Azimuth: 235.8143

  6. Нанесите на карту три пути в линейном геострукте:

    % On cylindrical projections like Mercator, great circle tracks
    % are curved except those that follow the Equator or a meridian.
    
    % Graphically differentiate the tracks by creating a symbolspec;
    % key line color to track length, using the 'summer' colormap.
    % Symbolspecs make it easy to vary color and linetype by
    % attribute values. You can also specify default symbologies.
    
    colorRange = makesymbolspec('Line',...
                {'Length',[min([Tracks.Length]) ...
                  max([Tracks.Length])],...
                 'Color',winter(3)});
    geoshow(Tracks,'SymbolSpec',colorRange);
    

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

    shapewrite(Cities,'citylocs');
    shapewrite(Tracks,'citytracks');

Создание полигональных геоструктов

Создание геострукта или mapstruct для данных полигона аналогично построению для данных точек или линий. Однако если многоугольники включают несколько частей, разделенных NaN, следует помнить, что они могут иметь только одно значение на атрибут, а не одно значение на деталь. Каждый атрибут, помещаемый в структурный элемент для такого многоугольника, относится ко всем его частям. Это означает, что если определить группу островов, например, с одним списком, разделенным NaN, для каждой координаты, все атрибуты этого элемента описывают острова как группу, а не как отдельные острова. Если требуется связать атрибуты с определенным островом, необходимо предоставить отдельный элемент структуры для этого острова.

Помните, что порядок вершин многоугольника имеет значение. При отображении данных полигонов направление, в котором проходят полигоны, имеет значение для того, как они визуализируются такими функциями, как geoshow, mapshow, и mapview. Правильная направленность особенно важна, если многоугольники содержат отверстия. Соглашение по картографическим инструментам кодирует координаты внешних колец (например, контуры континента и острова) в порядке по часовой стрелке; порядок против часовой стрелки используется для внутренних колец (например, озер и внутренних морей). Внутри матрицы координат каждое кольцо отделено от предшествующего ему кольца NaN.

При печати по mapshow или geoshowзаполняют кольца по часовой стрелке. Кольца против часовой стрелки незаполнены; любая лежащая в основе символика показывает сквозь такие отверстия. Для обеспечения правильного кодирования внешних и внутренних колец в соответствии с приведенным выше соглашением можно вызвать следующие функции:

  • ispolycw - True, если вершины многоугольного контура упорядочены по часовой стрелке

  • poly2cw - Преобразование полигонального контура в порядок по часовой стрелке

  • poly2ccw - Преобразовать многоугольный контур в порядок против часовой стрелки

  • poly2fv - Преобразование полигональной области в форму грань-вершина для использования с patch для правильной визуализации многоугольников, содержащих отверстия

Три из этих функций проверяют или изменяют порядок вершин, которые определяют многоугольник, а четвертая преобразует многоугольники с отверстиями в совершенно другое представление.

Пример работы с полигональными геоструктами см. в разделе Преобразование данных береговой линии (GSHHG) в формат Shapefile.

Отображение структур отображения панели инструментов версии 1

До версии 2, когда были введены геострукты и макроструктуры, при импорте геоданных из определенных внешних форматов использовалась иная структура данных, чтобы инкапсулировать их для функций отображения карт. Эти структуры отображения вмещали как данные растровых и векторных карт, так и другие виды объектов, но не имели общего характера текущих геоструктов и структур для представления векторных элементов и постепенно выходят из набора инструментов. Однако структуры отображения, содержащие векторные геоданные, можно преобразовать в геоструктовую форму с помощью updategeostruct. Дополнительные сведения о структурах отображения версии 1 и их использовании см. в разделе Структуры отображения версии 1 на справочной странице для displaym. Дополнительная информация находится на справочных страницах для updategeostruct, extractm, и mlayers.

См. также

|

Связанные темы