exponenta event banner

Упрощение данных полигона и линии

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

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.