exponenta event banner

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

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. Создайте цилиндрическую конформную проекцию Mercator, используя следующие пределы, задайте пятиградусную решетку, а затем постройте график контура для справки:

    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.