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

В примерах, обеспеченных в предшествующих главах, геоданные были в форме отдельных переменных. Программное обеспечение 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', 'Line' или 'Polygon'.

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

BoundingBox

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

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

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

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

X, Y, Lon или Lat

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

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

 

Attr

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

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

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

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

PolyLine и формы полигона

В географических структурах данных с 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 функций. В дополнение к 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 Data to Read для получения дополнительной информации.

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

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

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

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

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

  • Взаимно-однозначное соответствие существует между элементами структуры и географическими особенностями, который расширяет дочерним элементам hggroups, созданного 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.