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

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

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

Примечание

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

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

Загрузите набор данных topo и преобразуйте его к новой системе координат, в которой точкой на Шри-Ланке (7 градусов N, 80 градусов E) является Северный полюс.

load topo
origin = newpole(7,80)
origin = 1×3

   83.0000 -100.0000         0

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

[Z,lat,lon] = neworig(topo,topolegend,origin);

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

figure
axesm miller
latlim = [ -90  90];
lonlim = [-180 180];
gratsize = [90 180];
[lat,lon] = meshgrat(latlim,lonlim,gratsize);
surfm(lat,lon,Z);
demcmap(topo)

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

     0     0     0