В этом примере показано, как упростить данные полигона и линии с помощью reducem функция. Упрощение данных полигонов и линий может ускорить определенные вычисления, не оказывая заметного влияния на данные. Одним из способов упрощения является использование reducem сначала значение допуска по умолчанию и просмотрите выходные данные. Если результаты не соответствуют вашим требованиям, повторите операцию, увеличив или уменьшив значение допуска для достижения желаемого результата. reducem возвращает используемое значение допуска. Дополнительные сведения об упрощении векторных данных см. в разделе Упрощение векторных данных координат.
Извлечь береговые линии Массачусетса и границы штатов из usastatehi.shp файл формы.
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. 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')
