Упрощение многоугольников и линии

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

Figure contains an axes. The axes contains 2 objects of type line.

Чтобы лучше взглянуть на эти два контура, используйте 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')

Figure contains an axes. The axes contains 4 objects of type line.

Упрощение изменения данных о Допуске по умолчанию Значение

Выполните операцию еще раз, на этот раз удвоив значение допуска.

[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])

Figure contains an axes. The axes contains 5 objects of type line.

Упрощение данных о линиях снова увеличение допуска

Увеличьте допуск до 0,1 степени.

[masslat3, masslon3, cerr3, tol3] = reducem(masslat', masslon', 0.1);

Постройте этот сокращенный контур в черном цвете. Обратите внимание, что эта сокращенная карта сохраняет только самые широкие элементы исходной формы и теряет большую часть деталей.

geoshow(masslat3, masslon3, 'DisplayType', 'line', 'color', 'black')

Figure contains an axes. The axes contains 6 objects of type line.