Упростите данные о многоугольнике и линии

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