tissot и mdistort функции обеспечивают синоптические визуальные обзоры различных форм ошибки проекции карты. Иногда, однако, вам нужны числовые оценки ошибки в определенных местоположениях в порядок, чтобы количественно определить или исправить искажения карты. Это полезно, например, если вы дискретизируете данные окружающей среды на единообразном базисный по карте и хотите точно знать, какая площадь связана с каждой точкой выборки, статистическая величина, которая будет варьироваться в зависимости от местоположения и проекции. Как только у вас есть эта информация, вы можете настроить плотность окружающей среды и другую статистику, которую вы собираете для пространственных изменений, вызванных проекцией карты.
Функция Mapping Toolbox™ возвращает статистику ошибок карты конкретного местоположения из текущей проекции или mstruct. distortcalc функция вычисляет ту же статистику искажений, что и mdistort does, но для заданных местоположений, предоставленных в качестве аргументов. Вы предоставляете местоположения широта-долгота по одному за раз или в векторах. Общая форма
[areascale,angdef,maxscale,minscale,merscale,parscale] = ...
distortcalc(mstruct,lat,long)Однако, если вы оцениваете текущий рисунок карты, опускайте mstruct. Вы не должны задавать какие-либо значения возврата после последнего интересующего вас.
distortcalc Определение геометрических искажений проекции картыВ следующем упражнении используются distortcalc вычислить искажение максимальной площади для карты Аргентины из набора данных о земельных районах.
Прочитайте многоугольник Северной и Южной Америки:
Americas = shaperead('landareas','UseGeoCoords',true, ...
'Selector', {@(name) ...
strcmpi(name,{'north and south america'}),'Name'});Установите пространственную протяженность (пределы карты), чтобы содержать южную часть Южной Америки, а также включить область ближе к Южному полюсу:
mlatlim = [-72.0 -20.0];
mlonlim = [-75.0 -50.0];
[alat, alon] = maptriml([Americas.Lat], ...
[Americas.Lon], mlatlim, mlonlim);Создайте цилиндрическую конформную проекцию Меркатора с помощью этих пределов, задайте пятиградусную гратикулу, а затем постройте график для ссылки:
figure;
axesm('MapProjection','mercator','grid','on', ...
'MapLatLimit',mlatlim,'MapLonLimit',mlonlim,...
'MLineLocation',5, 'PLineLocation',5)
plotm(alat,alon,'b')Карта выглядит следующим образом:

Выборка каждой десятой точки контура закрашенной фигуры для анализа:
alats = alat(1:10:numel(alat)); alons = alon(1:10:numel(alat));
Вычислите искажения площади (первое значение, возвращаемое distortcalc) при точках выборки:
adistort = distortcalc(alats, alons);
Найдите область значений искажения площади по всей Аргентине (процент модуля площади на, в этом случае, экваторе):
adistortmm = [min(adistort) max(adistort)]
adistortmm =
1.1790 2.7716Поскольку Аргентина занимает средние южные широты, её площадь на карте Меркатора завышена, и ошибки заметно варьируются с севера на юг.
Удалите любое NaNs из массивов координат и графиков для представления относительных искажений как пропорциональных кругов, использование scatterm:
nanIndex = isnan(adistort); alats(nanIndex) = []; alons(nanIndex) = []; adistort(nanIndex) = []; scatterm(alats,alons,20*adistort,'red','filled')
Получившаяся карта показана ниже:

Степень завышения площади была бы значительно больше, если бы она простиралась дальше к полюсу. Чтобы увидеть, насколько больше, получите искажение площади для 50 ° S, 60 ° S и 70 ° S:
a=distortcalc(-50,-60)
a =
2.4203
a=distortcalc(-60,-60)
a =
4
>> a=distortcalc(-70,-60)
a =
8.5485Примечание
Вы можете использовать только distortcalc запросить местоположения, которые находятся в текущей системе координат карты или mstruct пределы. Внешние точки выходят NaN в результате.
Используя этот метод, вы можете написать простой скрипт, который позволяет вам неоднократно запрашивать карту, чтобы определить искажения в любом желаемом месте. Вы можете выбрать местоположения с помощью графического курсора inputm. Для примера,
[plat plon] = inputm(1)
plat =
-62.225
plon =
-72.301
>> a=distortcalc(plat,plon)
a =
4.6048Естественно, ответ, который вы получите, будет варьироваться в зависимости от того, какую точку вы выбираете. Используя этот метод, вы можете написать простой скрипт, который позволяет вам неоднократно запрашивать карту, чтобы определить любую статистику искажений в любом желаемом месте.
Попробуйте изменить проекцию карты или даже вектор ориентации, чтобы увидеть, как выбор проекции влияет на искажение карты. Для получения дополнительной информации смотрите страницу с описанием для distortcalc.