exponenta event banner

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

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

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

Загрузить 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.