Точки, линии и многоугольники

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

Отображение точки

В рабочей области MATLAB® векторные данные выражаются как пары переменных, которые представляют географические или координаты на плоскости для набора интересных мест. Например, одна точка, местоположение Эйфелевой башни может быть сопоставлено как вектор.

  1. Отобразите карту Франции.

    h = worldmap('France');
    landareas = shaperead('landareas.shp','UseGeoCoords', true);
    geoshow (landareas, 'FaceColor', [1 1 .5]);
  2. Сохраните местоположение Эйфелевой башни в векторной форме.

    TowerLat = 48.85;
    TowerLon = 2.28;
    
  3. Поместите красную точку в карту, чтобы указать на башню и пометить его.

    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 делят данные для простых многоугольников.

  1. Скопируйте и вставьте следующие векторные переменные в командной строке:

    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 являются тем же самым. Это - точка, где сегменты объединяются, чтобы закрыть многоугольник.

  2. Используйте mapshow функционируйте, чтобы отобразить многоугольник.

     mapshow(x,y,'DisplayType','polygon')
    

  3. В этом примере векторные переменные содержат данные, которые отображаются как компактный, многослойный многоугольник с отверстием. Сравните данные от таблицы до рисунка. Обратите внимание на то, что вершины на рисунке были помечены, чтобы соответствовать индексам. (Ваш выход не будет содержать эти метки.)

    Отдельные контуры в 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

Первые и предпоследние записи являются тем же самым, чтобы закрыть многоугольник.