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

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

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

Файлы форм

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

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

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

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

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

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

Geometry

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

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

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

BoundingBox

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

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

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

Не использованный для формы вводят 'Point'.

XYlon , или Lat

Массив 1 на n класса double

Координатный вектор.

 

Attr

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

Название атрибута, введите, и значение.

Дополнительный. Обычно существует несколько атрибутов.

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

PolyLine и Polygon Формы

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

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

Mapstructs и Geostructs

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

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

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

  • Используйте shapeinfo получить BoundingBox. Путем рассмотрения областей значений координат можно смочь сказать, какие координаты вы имеете.

  • Исследуйте дополнительный .prj файл, если вам предоставили. .prj файл записан в известном тексте, текстовом языке разметки. Если ваш .prj файл содержит термин PROJCS, у вас есть координаты карты. Если ваш .prj файл содержит термин GEOGCS, но не термин PROJCS, у вас есть географические координаты.

geoshow функционируйте отображает географические особенности, сохраненные в геоструктурах и mapshow функционируйте отображает географические особенности, сохраненные в mapstructs. При попытке отобразить mapstruct с geoshow, функция выдает предупреждение и вызывает mapshow. При попытке отобразить геоstruct с 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 функций. В дополнение к Geometryboundingbox, и координатные поля (X и Y), существует пять полей атрибута: STREETNAME, RT_NUMBERКласс, 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' функции. Десятая линия имеет девять вершин. Значения первых двух атрибутов являются векторами символов. Второе, оказывается, пустой символьный вектор. Итоговые три атрибута являются числовыми. Через элементы SX и Y может иметь различные длины, но STREETNAME и RT_NUMBER должен всегда содержать векторы символов и CLASS, ADMIN_TYPE и LENGTH должен всегда содержать скаляр, удваивается.

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

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

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

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

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

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

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

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

Высказывание геоструктур мнения и линии

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

  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. Создайте геоstruct точки; это должно иметь следующие обязательные поля:

    • 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. Отобразите геоstruct на Меркаторской проекции континентальных массивов Земли, сохраненных в landareas.shp файл форм, устанавливая пределы карты, чтобы исключить полярные области:

    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. Затем создайте геоstruct Линии, чтобы группировать большие круговые навигационные дорожки между этими тремя городами:

    % 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. Сопоставьте три дорожки в геоstruct линии:

    % 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');

Создание геоструктур многоугольника

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

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

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

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

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

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

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

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

Для примера работы с геоструктурами многоугольника смотрите Данные о Береговой линии Преобразования (GSHHG) к Формату Файла форм.

Структуры отображения версии 1 Mapping Toolbox

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