В этом примере показано, как упростить данные многоугольника и линий с помощью reducem функция. Упрощение данных многоугольника и линии может ускорить определенные вычисления, не оказывая заметного влияния на данные. Одним из способов подхода к упрощению является использование reducem с значением допуска по умолчанию вначале и просмотреть выход. Если результаты не соответствуют вашим требованиям, повторите операцию, увеличив или уменьшив значение допуска, чтобы достичь желаемого результата. reducem возвращает используемое значение допуска. Для получения дополнительной информации об упрощении векторных данных см. «Упрощение векторных данных координат».
Извлечение береговых линий и границ штата Массачусетс из usastatehi.shp shapefile.
ma = shaperead('usastatehi.shp','UseGeoCoords',true, ... 'Selector', {@(name)strcmpi(name,'Massachusetts'),'Name'}); masslat = ma.Lat; masslon = ma.Lon;
Результатом является пара векторов, которые очерчивают состояние с 957 вершинами.
numel(masslat)
ans = 957
Упростите контур с помощью reducem функция со значением допуска по умолчанию.
[masslat1, masslon1, cerr, tol] = reducem(masslat', masslon');
Проверьте результаты. Количество вершин уменьшено до 252. Векторы были сокращены примерно до четверти их исходных длин.
numel(masslat1)
ans = 252
numel(masslat1)/numel(masslat)
ans = 0.2633
Исследуйте значения ошибок и допусков, возвращенные reducem. The cerr значение указывает, что reducem уменьшил общую длину контура примерно на 3,3 процента. Допуск, который reducem использовано для достижения этого сокращения было 0,006 степени, или около 660 метров.
[cerr tol]
ans = 1×2
0.0331 0.0060
Постройте график редуцированного контура красным цветом по исходному контуру синим цветом с помощью geoshow. В этом разрешении трудно увидеть различие между исходным контуром и сокращенным контуром.
figure axesm('MapProjection', 'eqdcyl', 'MapLatLim', [41.1 43.0],... 'MapLonLim', [-73.6, -69.8], 'Frame', 'off', 'Grid', 'off'); geoshow(masslat, masslon, 'DisplayType', 'line', 'color', 'blue') geoshow(masslat1, masslon1, 'DisplayType', 'line', 'color', 'red')

Чтобы лучше взглянуть на эти два контура, используйте xlim и ylim для масштабирования фрагмента карты. Заметьте, как уменьшенный контур соответствует общим контурам исходной карты, но теряет много деталей.
axesm('MapProjection', 'eqdcyl', 'MapLatLim', [41.1 43.0],... 'MapLonLim', [-73.6, -69.8], 'Frame', 'off', 'Grid', 'off'); xlim([0.0104 0.0198]) ylim([0.7202 0.7264]) geoshow(masslat, masslon, 'DisplayType', 'line', 'color', 'blue') geoshow(masslat1, masslon1, 'DisplayType', 'line', 'color', 'red')

Выполните операцию еще раз, на этот раз удвоив значение допуска.
[masslat2,masslon2,cerr2,tol2] = reducem(masslat', masslon', 0.012); numel(masslat2)
ans = 157
numel(masslat2)/numel(masslat)
ans = 0.1641
Исследуйте значения ошибок и допусков, возвращенные reducem. На этот раз, cerr значение указывает, что reducem уменьшил общую длину контура примерно на 5,2 процента. Допуск, который reducem используемое для достижения этого сокращения составило 0,012 степени.
[cerr2 tol2]
ans = 1×2
0.0517 0.0120
Постройте этот уменьшенный контур в темно-зеленом цвете над исходным контуром в синем цвете. Обратите внимание, что этот сокращенный контур поддерживает общую форму исходной карты, но теряет большую часть мелких деталей.
geoshow(masslat2, masslon2, 'DisplayType', 'line', 'color', [0 .6 0])

Увеличьте допуск до 0,1 степени.
[masslat3, masslon3, cerr3, tol3] = reducem(masslat', masslon', 0.1);
Постройте этот сокращенный контур в черном цвете. Обратите внимание, что эта сокращенная карта сохраняет только самые широкие элементы исходной формы и теряет большую часть деталей.
geoshow(masslat3, masslon3, 'DisplayType', 'line', 'color', 'black')
