Вращательные преобразования на глобусе

В Векторе Ориентации вы исследовали концепцию изменения аспекта проекции карты с точки зрения проталкивания Северного полюса в новые местоположения. Другой способ подумать об этом - переопределить систему координат, а затем вычислить проекцию нормального аспекта на основе новой системы. Например, можно переопределить сферическую систему координат так, чтобы домашний город занял источник. Если вы вычислили проекцию карты в нормальном аспекте относительно этой преобразованной системы координат, полученное отображение будет выглядеть как наклонный аспект истинной системы координат широт и долгот.

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

Примечание

Типы координатных преобразований, описанные здесь, подходят только для сферического случая. Попытки выполнить их на эллипсоиде дадут неправильные ответы порядка от нескольких до десятков метров.

Когда вы помещаете свой родной город на полюс, сферическое расстояние каждой точки от родного города становится 90 ° минус его преобразованная широта (также известная как колатитуда). Точка антиподы для вашего города станет Южным полюсом, на -90 °. Его расстояние от родного города 90 ° - (-90 °), или 180 °, как и ожидалось. Точки на 90 °, удаленные от вашего родного города, имеют преобразованную широту 0 ° и, таким образом, составляют преобразованный экватор. Преобразованные долготы соответствуют их соответствующим большим азимутам круга от вашего родного города.

Переориентируйте векторные данные с помощью rotatem

rotatem функция использует вектор ориентации, чтобы преобразовать широты и долготы в новую систему координат. Вектор ориентации может быть произведен newpole или putpole функций, или может быть задано вручную.

Как пример преобразования системы координат, предположим, вы живете в Мидленде, штат Техас, в (32 ° N, 102 ° W). У вас есть брат в Талсе (36,2 ° N, 96 ° W) и сестра в Новом Орлеане (30 ° N, 90 ° W).

  1. Определите три местоположения:

    midl_lat = 32;   midl_lon = -102;
    tuls_lat = 36.2; tuls_lon = -96;
    newo_lat = 30;   newo_lon = -90;
  2. Используйте distance функция для определения больших круговых расстояний и азимутов Талсы и Нового Орлеана из Мидленда:

    [dist2tuls az2tuls] = distance(midl_lat,midl_lon,...
                                   tuls_lat,tuls_lon)
    
    dist2tuls =
       6.5032
    
    az2tuls =
      48.1386
    
    [dist2neworl az2neworl] = distance(midl_lat,midl_lon,...
                                       newo_lat,newo_lon)
    
    dist2neworl =
      10.4727
    
    az2neworl =
      97.8644
    

    Талса находится на расстоянии около 6,5 степени, Новый Орлеан на расстоянии около 10,5 степени.

  3. Вычислите абсолютное различие в азимуте, факт, который вы будете использовать позже.

    azdif = abs(az2tuls-az2neworl)
    
    azdif =
       49.7258
  4. Сегодня вы чувствуете себя на верхней части мира, поэтому сделайте Мидленд, штат Техас, северным полюсом преобразованной системы координат. Для этого сначала определите источник, необходимую для помещения Мидленда к полюсу, используя newpole:

    origin = newpole(midl_lat,midl_lon)
    
    origin =
    	58    78     0

    Отправным источником новой системы координат является (58 ° N, 78 ° E). Сейчас Мидленд находится на новой широте 90 °.

  5. Определите преобразованные координаты Талсы и Нового Орлеана с помощью rotatem команда. Поскольку его модули по умолчанию для радианов, обязательно включите degrees ключевое слово:

    [tuls_lat1,tuls_lon1] = rotatem(tuls_lat,tuls_lon,...
                                    origin,'forward','degrees')
    
    tuls_lat1 =
    	83.4968
    tuls_lon1 =
    	-48.1386
    
    [newo_lat1,newo_lon1] = rotatem(newo_lat,newo_lon,...
                                    origin,'forward','degrees')
    
    newo_lat1 =
    	79.5273
    newo_lon1 =
    	-97.8644
  6. Покажите, что новые колатитуды Талсы и Нового Орлеана равны их расстояниям от Мидленда, вычисленным на шаге 2 выше:

    tuls_colat1 = 90-tuls_lat1
    
    tuls_colat1 =
        6.5032
    
    newo_colat1 = 90-newo_lat1
    
    newo_colat1 =
       10.4727
  7. Напомним, с 4 шага абсолютное различие азимутов двух городов от Мидленда составило 49,7258 °. Проверьте, что это равняется различию в их новых долготах:

    tuls_lon1-newo_lon1
    
    ans =
       49.7258

    Можно отметить небольшие числовые различия в результатах (порядка 10-6), из-за округлой ошибки и тригонометрических функций.

Для получения дополнительной информации см. страницы с описанием для rotatem, newpole, putpole, neworig, и org2pol.

Переориентация данных в сетке

В этом примере показано, как преобразовать регулярную сетку данных в новую с перестроенными данными, чтобы соответствовать новой системе координат с помощью neworig функция. Можно преобразовать системы координат сетки данных, а также векторные данные. Когда регулярные сетки данных манипулируются таким образом, вычисления расстояния и азимута с переменной map становятся операциями строка и столбец.

Загрузка повышения растровых данных и географических камер ссылки объекта. Преобразуйте набор данных в новую систему координат, в которой точка на Шри-Ланке является северным полюсом. Переориентируйте сетку данных при помощи neworig функция. Обратите внимание, что результат, [Z,lat,lon], является геолокированной сеткой данных, а не регулярной сеткой данных, такой как исходные данные.

load topo60c
origin = newpole(7,80);
[Z,lat,lon] = neworig(topo60c,topo60cR,origin);

Отобразите новую карту в нормальном аспекте, как показывает ее вектор ориентации. Обратите внимание, что каждая камера в первой строке новой сетки находится на расстоянии от 0 до 1 степеней от точки нового источника. Каждая камера во второй строке находится на расстоянии от 1 до 2 степеней и так далее. В сложение каждая камера в конкретном столбце имеет такой же большой азимут окружности от нового источника.

axesm miller
lat = linspace(-90,90,90);
lon = linspace(-180,180,180);
surfm(lat,lon,Z);
demcmap(topo60c)

Figure contains an axes. The axes contains an object of type surface.

mstruct = getm(gca);
mstruct.origin
ans = 1×3

     0     0     0