球面上的旋转变换

方向向量,你探索了改变地图投影方面的概念,即将北极推向新的位置。考虑这个问题的另一种方法是重新定义坐标系统,然后基于新系统计算一个正常的方面投影。例如,您可以重新定义一个球坐标系,以便您的家乡占据原点。如果你计算一个映射投影在一个法向方向上改变了坐标系中,结果显示将看起来像一个斜面真正的经纬度坐标系统。

这种坐标系统的转换可以独立于地图显示而有用。如果你变换坐标系统,让你的家乡成为新的北极,则转换后的所有其他点的坐标将提供有趣的信息。

请注意

这里描述的坐标变换类型仅适用于球形情况。尝试在椭球上进行测试将会产生错误的答案,误差在几米到几十米之间。

当你把你的家乡放在一个极点上时,每个点到你家乡的球形距离变成90°减去它的转换纬度(也称为a余纬度).与你的城镇相对的点将成为南极,在-90°。它与你家乡的距离是90°-(-90°),或如预期的180°。距离家乡90°的点,其变换纬度均为0°,构成变换后的纬度赤道.转换后的经度与它们各自的大圆方位角对应。

向量数据重定向rotatem

rotatem函数使用方向向量将纬度和经度转换为新的坐标系统。方向向量可以由newpoleputpole函数,也可以手动指定。

作为转换坐标系的一个例子,假设你住在德克萨斯州的米德兰,在(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;new_lat = 30;new_lon = -90;
  2. 使用距离从米德兰确定塔尔萨和新奥尔良的大圆距离和方位角的函数:

    [dist2tuls az2tuls] = distance(midl_lat,midl_lon,…Tuls_lat,tuls_lon) dist2tls = 6.5032 az2tls = 48.1386 [dist2neworld az2neworld] = distance(midl_lat,midl_lon,…new_lat, new_lon) dist2neworld = 10.4727 az2neworld = 97.8644

    塔尔萨大约6.5度,新奥尔良大约10.5度。

  3. 计算方位角的绝对差值,这是你稍后会用到的事实。

    Azdif = abs(az2tars - az2neworld) Azdif = 49.7258
  4. 今天,你觉得自己站在世界之巅,所以让德克萨斯州的米德兰成为北极一个变换后的坐标系。要做到这一点,首先要确定将米德兰置于极点所需的原点newpole

    原点= newpole(midl_lat,midl_lon)原点= 58 78 0

    新坐标系的原点为(58°N, 78°E)。米德兰现在是a新纬度90°。

  5. 方法确定塔尔萨和新奥尔良的转换坐标rotatem命令。因为它的单位默认为弧度,所以一定要包含关键字:

    [tuls_lat1,tuls_lon1] = rottem (tuls_lat,tuls_lon,…tuls_lat1 = 83.4968 tuls_lon1 = -48.1386 [new_lat1, new_lon1] = rottem (new_lat, new_lon,…Origin,'forward','degrees') new_lat1 = 79.5273 new_lon1 = -97.8644
  6. 表明塔尔萨和新奥尔良的新纬度等于它们到上面第2步计算的米德兰的距离:

    Tuls_colat1 = 90-tuls_lat1 Tuls_colat1 = 6.5032 new_colat1 = 90- new_lat1 new_colat1 = 10.4727
  7. 回想第4步,两个城市从米德兰的方位角绝对差为49.7258°。验证这等于它们的新经度之差:

    tuls_lon1- new_lon1 ans = 49.7258

    您可能会注意到结果中的微小数值差异(大约10的数量级)6),由于四舍五入误差和三角函数。

有关详细信息,请参阅的参考页rotatemnewpoleputpoleneworig,org2pol

重新定向网格化数据

方法将常规数据网格转换为新的数据网格,并将其数据重新排列以对应于新的坐标系统neworig函数。您可以转换数据网格的坐标系统以及矢量数据。当以这种方式操作常规数据网格时,使用map变量的距离和方位角计算就变成了行和列操作。

加载威尼斯平底渔船并将其转换为一个新的坐标系统,其中斯里兰卡的一个点(北纬7度,东经80度)是北极。

负载威尼斯平底渔船原点=新极(7,80)
起源=1×383.0000 -100.0000 0

控件重新定位数据网格neworig函数,使用这个方向向量。注意结果,(Z,纬度,经度),是一个地理定位的数据网格,而不是像原来的常规数据网格威尼斯平底渔船数据。

[Z,lat,lon] = neworig(拓扑,拓扑传说,起源);

显示新地图,在正常方面,如其方向矢量所示。注意,新网格第一行中的每个单元格与新原点的距离为0到1度。第二行中的每个单元格都有1到2度的距离,以此类推。此外,特定列中的每个单元格与新原点的大圆方位角相同。

图axesm米勒Latlim = [-90 90];Lonlim = [-180 180];Gratsize = [90 180];[lat,lon] = meshgrat(latlim,lonlim,gratsize);surfm(纬度,经度,Z);demcmap(威尼斯平底渔船)

Mstruct = getm(gca);mstruct.origin
ans =1×30 0 0