Обрезка векторов для сохранения полигональных закрашенных фигур

В этом примере показано, как обрезать векторы для формирования линий и многоугольников с помощью maptriml и maptrimp функций. Нет ничего необычного в том, что векторные данные выходят за пределы представляющего интерес географической области. Например, вы можете иметь данные о береговой линии для всего мира, но заинтересованы в отображении только Австралии. В этой и других ситуациях можно хотеть исключить ненужные данные из рабочей области и из вычислений в порядок сохранения памяти или ускорения обработки и отображения. Линия данные и закрашенная фигура данные необходимо обрезать по-разному. Можно обрезать данные о линиях путем простого удаления точек за пределами необходимой области путем обрезки линий на карте системы координат или в какую-либо другую определенную область. Данные патча требуют более сложного метода, чтобы гарантировать, что объекты закрашенной фигуры правильно сформированы. Если вы хотите обрабатывать векторы как данные о линиях, maptriml функция возвращает переменные, содержащие только те точки, которые находятся в заданной области. Если вместо этого необходимо сохранить формат многоугольника, используйте maptrimp функция. Однако имейте в виду, что данные с обрезкой патчей обычно большие и более дорогие для вычисления.

Примечание. При рисовании карт функция отображения Mapping Toolbox автоматически обрезает векторные геоданные по области, заданной пределами системы координат (FLatLimit и FLonLimit map осей свойств) для азимутальных проекций или для кадра или карты пределов (MapLatLimit и MapLonLimit map axes properties) для неазимутальных проекций. Обрезка выполняется внутренне в стандартной программе отображения, сохраняя исходные данные в целости.

Загрузите coastlines MAT-файл. Этот файл содержит данные для всего мира.

load coastlines

Определите необходимую область с центром на Австралии.

latlim = [-50 0]; 
lonlim = [105 160];

Использование maptriml чтобы удалить все данные линии за пределами этих пределов, создавая векторы линии.

[linelat,linelon] = maptriml(coastlat,coastlon,latlim,lonlim);

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

[polylat,polylon] = maptrimp(coastlat,coastlon,latlim,lonlim);

Исследуйте переменные, чтобы увидеть, сколько данных было уменьшено. Обрезанные данные на 10% больше исходного набора данных.

whos
  Name             Size            Bytes  Class     Attributes

  coastlat      9865x1             78920  double              
  coastlon      9865x1             78920  double              
  latlim           1x2                16  double              
  linelat        977x1              7816  double              
  linelon        977x1              7816  double              
  lonlim           1x2                16  double              
  polylat        961x1              7688  double              
  polylon        961x1              7688  double              

Постройте график обрезанных векторов закрашенной фигуры с помощью проекции Миллера.

axesm('MapProjection', 'miller', 'Frame', 'on',...
'FlatLimit', latlim, 'FlonLimit', lonlim)
patchesm(polylat, polylon, 'c')

Figure contains an axes. The axes contains 40 objects of type patch.

Постройте график обрезанных векторов линий, чтобы увидеть, что они соответствуют закрашенным фигурам.

plotm(linelat, linelon, 'm')

Figure contains an axes. The axes contains 41 objects of type patch, line.