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

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