Определите количество искажений карты в местоположениях точки

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

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

[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.