В этом примере показано, как обрезать векторы, чтобы сформировать линии и многоугольники с помощью 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')