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