角度和方向

方位角是直线与子午线所成的角度,从正北方向开始,按顺时针方向测量。这样,正北方向的方位角为0°,正东方向为90°,正南为180°,正西为270°。可以用Mapping工具箱计算任何成对点位置的方位角,或者沿恒向线,或者沿大圆。除了沿正方向外,两种方式会生成不同的结果。[大谦MATLAB,dqmatlab点com]

沿恒向线时,反向计算方位角,即从第2个点向第1个点计算,生成前向方位角的余角。沿大圆时,反方位角通常不是余角,其差别与两点之间的距离有关。

除了前向方位角和反向方位角外,工具箱还可以计算相对于参考点给定了距离和方位角的点,也分沿大圆和沿恒向线两种情况。

定位——前向问题

地理应用中一个常见的问题是给定起点位置、初始方位角和距离时计算目标点的方位。工具箱中,这个过程称为定位。新位置可以有大圆和恒向线两种意义上的推算。

作为示例,假设一架飞机从纽约的La Guardia飞机场出发,沿西北方向的恒向线以200海里每小时的速度前进,求它一小时以后的位置。下面用reckon函数进行计算。

code.matlab
>> [rhlat,rhlong]=reckon('rh',40.75,-73.9,nm2deg(200),315)
rhlat =
    43.1054
rhlong =
    -77.0665

注意,距离200海里需要用nm2deg函数转换为表示弧长的度数,以与纬度和经度输入相匹配。如果飞机上有一台计算机,利用它可以沿一条精确的大圆路径飞行,一小时以后飞机的位置又在哪里呢?在命令窗口键入下面的命令行:

code.matlab
>> [gclat,gclong]=reckon('gc',40.75,-73.9,nm2deg(200),315)
gclat =
    43.0615
gclong =
    -77.1238

结果区别不大。

计算跟踪路径——大圆和恒向线

可以用track1或track2函数,对应于沿大圆或恒向线的点生成矢量数据。

如果在路径上有一个点和该点上的一个方位角,使用track1函数;如果路径上有两个点,使用track2函数。例如,起点为(31ºS, 90ºE),方位角为45°,距离为12°,求大圆上的跟踪点,用track1函数计算:

code.matlab
>> [latgc,longc]=track1('gc',-31,90,45,12);

起点为(31ºS, 90ºE),终点为(23ºS, 110ºE),用track2函数计算:

code.matlab
>> [latgc,longc]=track2('gc',-31,90,-23,110);

track1函数还允许在一定范围内指定端点的位置。例如,如果指定起点距离初始点5°,终点距离初始点13°,方位角为55°,可以像下面这样指定限制范围。

code.matlab
>> [latrh,lonrh]=track1('rh',-31,90,55,[5 13]);

没有范围提供给track1函数时,返回点表示完整的跟踪路径。对于大圆的情况,完整路径是360°,围绕星球并返回初始点;对于恒向线的情况,除非方位角为90°或270°,完整的跟踪在极点处终止,此时完整路径为返回到初始点的纬线。

距离、方位角和反方位角(反向问题)

用工具箱计算两点之间的距离时,结果取决于想要的是大圆距离还是恒向线距离。distance函数用弧长角度返回两点之间的合适距离,对输入纬度和经度采用相同的角度单位。默认的路径类型是更短的大圆,默认的角度单位是度。

点(15ºS, 0°)和点(60ºN, 150ºE)之间的大圆距离,用弧度表示为

code.matlab
>> distgc=distance(-15,0,60,150)
distgc =
    129.9712

恒向线距离更大

code.matlab
>> distrh=distance('rh',-15,0,60,150)
distrh =
    145.0288

要确定恒向线路径长多少,并用公里表示,可以用距离转换函数进行计算。

code.matlab
>> kmdifference=deg2km(distrh-distgc)
kmdifference =
    1.6744e+03

工具箱中有几个转换函数可以使用,它们支持度、弧度、公里、米、英里、海里和英尺等单位。在弧长角度单位和曲面长度单位之间转换需要星球或椭球体的半径。默认时使用地球的半径。

计算方位角和仰角

方位角是直线与子午线所成的角度,从正北方向开始,按顺时针方向测量。用工具箱计算点至另一点的方位角时,结果跟选择大圆还是恒向线有关。对于大圆的情况,得到的方位角是大圆起点的方位角,通常,沿大圆的方位角不是常数。对于恒向线的情况,生成的方位角沿整个路径都是常数。

方位角的单位与输入的纬度和经度的相同。默认的路径类型是大圆,单位为度。

下面的例子中,第1点到第2点的大圆方位角为

code.matlab
>> azgc=azimuth(-15,0,60,150)
azgc =
    19.0391

对于恒向线的情况,保持恒定值的方位角:

code.matlab
>> azrh=azimuth('rh',-15,0,60,150)
azrh =
    58.8595

恒向线的一个特性是,反方位角是前向方位角的补角,可以通过简单地给前向值添加180°进行计算。

code.matlab
>> inverserh=azimuth('rh',60,150,-15,0)
inverserh =
    29.8595
>> difference=inverserh-azrh
difference =
    180

大圆则不具备这样的特点,如

code.matlab
>> inversegc=azimuth('gc',60,150,-15,0)
inversegc =
    320.9353
>> difference=inversegc-azgc
difference =
    301.8962

几个主要方向上的方位角如表3-1所示。

表3-1 几个主要方向上的方位角

方 向 方 位 角
0°或360°
东北 45°
90°
东南 135°
180°
西南 225°
西 270°
西北 315°

仰角是某点所在的局部水平面与该点和另一点连线的夹角。要计算第1点到第2点的仰角,需要知道两个点的位置和高程。纬度和经度的默认单位为度,高程的默认单位为米。下面计算位置为10 km东,高程为10 km的点的仰角

code.matlab
>> [elevang,slantrange]=elevation(0,0,0, 0,km2deg(10),10000)
elevang =
       44.901
slantrange =
        14156

结果与平面几何的计算结果有一点点区别,因为地球表面是曲面。