Количественная оценка искажений карты в точках

tissot и mdistort функции обеспечивают синоптические визуальные обзоры различных форм ошибки проекции карты. Иногда, однако, вам нужны числовые оценки ошибки в определенных местоположениях в порядок, чтобы количественно определить или исправить искажения карты. Это полезно, например, если вы дискретизируете данные окружающей среды на единообразном базисный по карте и хотите точно знать, какая площадь связана с каждой точкой выборки, статистическая величина, которая будет варьироваться в зависимости от местоположения и проекции. Как только у вас есть эта информация, вы можете настроить плотность окружающей среды и другую статистику, которую вы собираете для пространственных изменений, вызванных проекцией карты.

Функция Mapping Toolbox™ возвращает статистику ошибок карты конкретного местоположения из текущей проекции или mstruct. distortcalc функция вычисляет ту же статистику искажений, что и mdistort does, но для заданных местоположений, предоставленных в качестве аргументов. Вы предоставляете местоположения широта-долгота по одному за раз или в векторах. Общая форма

[areascale,angdef,maxscale,minscale,merscale,parscale] = ...
    distortcalc(mstruct,lat,long)

Однако, если вы оцениваете текущий рисунок карты, опускайте mstruct. Вы не должны задавать какие-либо значения возврата после последнего интересующего вас.

Использование distortcalc Определение геометрических искажений проекции карты

В следующем упражнении используются distortcalc вычислить искажение максимальной площади для карты Аргентины из набора данных о земельных районах.

  1. Прочитайте многоугольник Северной и Южной Америки:

    Americas = shaperead('landareas','UseGeoCoords',true, ...
        'Selector', {@(name) ...
        strcmpi(name,{'north and south america'}),'Name'});
  2. Установите пространственную протяженность (пределы карты), чтобы содержать южную часть Южной Америки, а также включить область ближе к Южному полюсу:

    mlatlim = [-72.0 -20.0];
    mlonlim = [-75.0 -50.0];
    [alat, alon] = maptriml([Americas.Lat], ...
        [Americas.Lon], mlatlim, mlonlim);
  3. Создайте цилиндрическую конформную проекцию Меркатора с помощью этих пределов, задайте пятиградусную гратикулу, а затем постройте график для ссылки:

    figure;
    axesm('MapProjection','mercator','grid','on', ...
        'MapLatLimit',mlatlim,'MapLonLimit',mlonlim,...
        'MLineLocation',5, 'PLineLocation',5)
    plotm(alat,alon,'b')

    Карта выглядит следующим образом:

  4. Выборка каждой десятой точки контура закрашенной фигуры для анализа:

    alats = alat(1:10:numel(alat));
    alons = alon(1:10:numel(alat));
  5. Вычислите искажения площади (первое значение, возвращаемое distortcalc) при точках выборки:

    adistort = distortcalc(alats, alons);
  6. Найдите область значений искажения площади по всей Аргентине (процент модуля площади на, в этом случае, экваторе):

    adistortmm = [min(adistort) max(adistort)]
    
    adistortmm =
        1.1790    2.7716

    Поскольку Аргентина занимает средние южные широты, её площадь на карте Меркатора завышена, и ошибки заметно варьируются с севера на юг.

  7. Удалите любое NaNs из массивов координат и графиков для представления относительных искажений как пропорциональных кругов, использование scatterm:

    nanIndex = isnan(adistort);
    alats(nanIndex) = [];
    alons(nanIndex) = [];
    adistort(nanIndex)  = [];
    scatterm(alats,alons,20*adistort,'red','filled')

    Получившаяся карта показана ниже:

  8. Степень завышения площади была бы значительно больше, если бы она простиралась дальше к полюсу. Чтобы увидеть, насколько больше, получите искажение площади для 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 в результате.

  9. Используя этот метод, вы можете написать простой скрипт, который позволяет вам неоднократно запрашивать карту, чтобы определить искажения в любом желаемом месте. Вы можете выбрать местоположения с помощью графического курсора inputm. Для примера,

    [plat plon] = inputm(1)
    
    plat =
          -62.225
    plon =
          -72.301
    >> a=distortcalc(plat,plon)
    
    a =
           4.6048

    Естественно, ответ, который вы получите, будет варьироваться в зависимости от того, какую точку вы выбираете. Используя этот метод, вы можете написать простой скрипт, который позволяет вам неоднократно запрашивать карту, чтобы определить любую статистику искажений в любом желаемом месте.

Попробуйте изменить проекцию карты или даже вектор ориентации, чтобы увидеть, как выбор проекции влияет на искажение карты. Для получения дополнительной информации смотрите страницу с описанием для distortcalc.