exponenta event banner

Вращательные преобразования на земном шаре

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

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

Примечание

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

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

Загрузите растровые данные отметки и объект ссылки на географические ячейки. Преобразуйте набор данных в новую систему координат, в которой точка в Шри-Ланке является северным полюсом. Переориентировать сетку данных с помощью 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