Векторы для обрезки, чтобы сохранить многоугольные закрашенные фигуры

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

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

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

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')

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

plotm(linelat, linelon, 'm')