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

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

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

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

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