В контексте геоданных векторные данные означают точки, линии и многоугольники, которые представляют географические объекты. Векторные картографические данные используются, чтобы представлять функции точки, такие как города и ориентиры; линейные функции, такие как реки и магистрали; и ареальные функции, такие как массы воды и избирательные округа.
В рабочей области MATLAB® векторные данные выражаются как пары переменных, которые представляют географические или координаты на плоскости для набора интересных мест. Например, одна точка, местоположение Эйфелевой башни может быть сопоставлено как вектор.
Отобразите карту Франции.
h = worldmap('France'); landareas = shaperead('landareas.shp','UseGeoCoords', true); geoshow (landareas, 'FaceColor', [1 1 .5]);
Сохраните местоположение Эйфелевой башни в векторной форме.
TowerLat = 48.85; TowerLon = 2.28;
Поместите красную точку в карту, чтобы указать на башню и пометить его.
geoshow(TowerLat, TowerLon, 'Marker','.','MarkerEdgeColor','red') textm(TowerLat,TowerLon + 0.5, 'Eiffel Tower');
Этот простой пример демонстрирует, как использовать функциональный linem
отобразить векторные данные для трех коротких линий, переходящих от одной общей конечной точки.
axesm sinusoid; framem; linem([15; 0; -45; -25],[-100; 0; 70; 110],'r-') linem([15; -30; -60; -65],[-100; -20; 100; 150],'b-') linem([15; 20; 40; 20],[-100; -20; 40; 50], 'g-')
Реки являются примерами линий. Введите следующий код, чтобы добавить реки в карту Франции:
h = worldmap('France'); landareas = shaperead('landareas.shp','UseGeoCoords', true); geoshow (landareas, 'FaceColor', [1 1 .5]); rivers = shaperead('worldrivers', 'UseGeoCoords', true); geoshow(rivers, 'Color', 'blue')
Узнайте больше о rivers
массив структур:
rivers
rivers = 128x1 struct array with fields: Geometry BoundingBox Lon Lat Name
rivers
содержит 128 мировых рек. Введите следующее в командной строке, чтобы просмотреть структуру для восьмой реки:
rivers(8)
ans = Geometry: 'Line' BoundingBox: [2x2 double] Lon: [129.6929 128.9659 128.7473 NaN] Lat: [63.3965 63.4980 63.5220 NaN] Name: 'Lena'
Реки хранятся как формы типа 'Line'
. Данные для восьмой реки, Лены, хранятся в Lat
и Lon
векторы. Обратите внимание на то, что каждый вектор заканчивается NaN.
Много общих объектов карты, таких как государственные границы, острова, и континенты, являются многоугольниками. Некоторые объекты многоугольника в реальном мире могут иметь много частей: например, острова, которые составляют Гавайи. При кодировании как векторные переменные форм таких составных сущностей необходимо разделить последовательные сущности. Чтобы указать, что такой разрыв существует, тулбокс использует соглашение размещения NaNs в идентичных положениях в обеих векторных переменных. Диафрагма NaN служит "перьевой" командой, командой, чтобы прекратить чертить один многоугольник и начинать чертить другого. Пример ниже демонстрирует, как диафрагмы NaN делят данные для простых многоугольников.
Скопируйте и вставьте следующие векторные переменные в командной строке:
x = [40 55 33 10 0 5 10 40 NaN 10 25 30 25 10... 10 NaN 90 80 65 80 90 NaN]; y = [50 20 0 0 15 25 55 50 NaN 20 10 10 20 30... 20 NaN 10 0 20 25 10 NaN];
Эти векторные переменные появляются как строки в следующей таблице, наряду со строкой, перечисляющей индексы.
Заметьте, что NaNs появляются в тех же местоположениях в обоих x
и y
векторы. Столбцы 9, 16 и 22 из таблицы имеют NaNs. Они отмечают деление между отдельными многоугольниками. Кроме того, заметьте, что данные о X и Y для вершин 1 и 8 являются тем же самым. Это - точка, где сегменты объединяются, чтобы закрыть многоугольник.
Используйте mapshow
функционируйте, чтобы отобразить многоугольник.
mapshow(x,y,'DisplayType','polygon')
В этом примере векторные переменные содержат данные, которые отображаются как компактный, многослойный многоугольник с отверстием. Сравните данные от таблицы до рисунка. Обратите внимание на то, что вершины на рисунке были помечены, чтобы соответствовать индексам. (Ваш выход не будет содержать эти метки.)
Отдельные контуры в X и Y приняты, чтобы быть внешними контурами, если их вершины располагаются в по часовой стрелке порядке; в противном случае они приняты, чтобы быть внутренними контурами. Вы видите, что "отверстие" имеет вершины, которые появляются в против часовой стрелки порядке.
Теперь рассмотрите пример многоугольников на карте Соединенных Штатов. Введите следующий код, чтобы отобразить карту США (исключая Аляску и Гавайи):
figure; ax = usamap('conus'); set(ax, 'Visible', 'off') states = shaperead('usastatelo', 'UseGeoCoords', true); names = {states.Name}; indexConus = 1:numel(states); stateColor = [0.5 1 0.5]; geoshow(ax, states(indexConus), 'FaceColor', stateColor) setm(ax, 'Frame', 'off', 'Grid', 'off',... 'ParallelLabel', 'off', 'MeridianLabel', 'off')
Исследуйте структуру на одно из состояний:
states(4)
ans = Geometry: 'Polygon' BoundingBox: [2x2 double] Lon: [1x183 double] Lat: [1x183 double] Name: 'Arkansas' LabelLat: 34.8350 LabelLon: -91.8861
Вы видите, что Арканзас имеет тип формы 'Polygon'
. Просмотрите последнюю запись в Lat
вектор:
states(4).Lat(end)
ans = NaN
NaN служит диафрагмой между многоугольниками.
Сравните первые и предпоследние записи:
states(4).Lat(1) states(4).Lat(182)
ans = 33.0200 ans = 33.0200
Первые и предпоследние записи являются тем же самым, чтобы закрыть многоугольник.