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
Поскольку Аргентина занимает средние южные широты, её площадь на карте Меркатора завышена, и ошибки заметно варьируются с севера на юг.
Удалите любое NaN
s из массивов координат и графиков для представления относительных искажений как пропорциональных кругов, использование 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
.