В примерах, обеспеченных в предшествующих главах, геоданные были в форме отдельных переменных. Программное обеспечение 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
присваивает поле соответственно модифицированное имя, обычно путем заменения символами нижнего подчеркивания пробелы.
Поля в географической структуре данных
Имя поля | Тип данных | Описание | Комментарии |
---|---|---|---|
|
символьный вектор |
Один из следующих типов формы: | Для 'PolyLine' , значение Geometry полем является просто 'Line' . |
|
Числовой массив 2 на 2 |
Задает минимальные и максимальные значения координаты функции в каждой размерности в следующей форме:
|
Не использованный для формы вводят |
|
Массив 1 на n класса |
Координатный вектор. | |
|
вектор символов или скалярный номер |
Название атрибута, введите, и значение. |
Дополнительный. Обычно существует несколько атрибутов. |
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, применяются к частям всей функции в комбинации.
По умолчанию, 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
Класс
, 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.
Взаимно-однозначное соответствие существует между элементами структуры и географическими особенностями, который расширяет дочерним элементам hggroup
объекты создаются mapshow
и geoshow
.
Достижение этих преимуществ не затрудняет. Используйте следующий пример в качестве руководства по упаковочным векторным геоданным, которые вы импортируете или создаете в географические структуры данных.
Следующий пример сначала создает геоstruct точки, содержащий три города на различных континентах, и строит его с geoshow
. Затем это создает геоstruct линии, содержащий данные для больших круговых навигационных дорожек, соединяющих эти города. Наконец, это строит эти графики с помощью symbolspec.
Начните с маленького набора данных о точке, аппроксимируйте широты и долготы для трех городов на трех континентах:
latparis = 48.87084; lonparis = 2.41306; % Paris coords latsant = -33.36907; lonsant = -70.82851; % Santiago latnyc = 40.69746; lonnyc = -73.93008; % New York City
Создайте гео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'
Отобразите гео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');
Затем создайте гео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);
Вычислите длины больших круговых дорожек:
% 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
Сопоставьте три дорожки в гео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) к Формату Файла форм.
До Версии 2, когда геоструктуры и mapstructs были введены, различная структура данных использовалась при импорте геоданных из определенных внешних форматов, чтобы инкапсулировать его для функций отображения карты. Они display structures, размещенный и растр и векторные данные о карте и другие виды объектов, но, испытал недостаток в общности текущих геоструктур и mapstructs для представления векторных функций и поэтапно осуществляется из тулбокса. Однако можно преобразовать структуры отображения, которые содержат векторные геоданные к форме геоstruct с помощью updategeostruct
. Для получения дополнительной информации о структурах отображения Версии 1 и их использовании, смотрите Структуры Отображения Версии 1 на странице с описанием для displaym
. Дополнительная информация расположена на страницах с описанием для updategeostruct
, extractm
, и mlayers
.