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

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