地理信息系统中的量算

【地理信息系统中的量算】转载来源:
http://space.itpub.net/2052/viewspace-166491

地理信息系统中牵涉到各种各样的量算,例如距离、方位、面积等等。这些量算的方法或者计算繁复,或者较难找到资料,从今天开始逐渐贴出自己整理的计算方法,也作为自己的资料积累。
距离量算:
距离量算可以通过不同的方式进行:
1、将经纬度坐标通过投影方式投影到二维坐标,然后通过二维坐标的取值计算两点之间的距离。这种方法计算量较大,同时投影通常都会引起误差。在需要进行快速计算时不推荐使用;
2、大圆航线距离计算。按照定义,大圆线是球面上半径等于球体半径的圆弧。大圆线是连接球面上两点最短的路径所在的曲线。大圆距离的公式是:

d=acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))

其中,lat1和lon1分别为第一点纬度和经度,而lat2和lon2分别为第二点的纬度和经度。而最后的结果d的单位是度或者弧度,而根据定义,60海里为一度,1海里等于1852米。

另一个对于短距离计算误差较小的大圆长度公式是:


d=2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))


3、恒向线距离。恒向线的定义是:即沿两点间固定方位角航行的航线。这不是航程最短的航线,而是操纵方便的沿单一航向航行的航线。恒向线的距离要大于两点之间的大圆线距离。


恒向线距离d的公式是:



if (abs(lat2-lat1) < sqrt(TOL))

{ q=cos(lat1) }

else

{ q= (lat2-lat1)/log(tan(lat2/2+pi/4)/tan(lat1/2+pi/4)) } d=sqrt((lat2-lat1)^2+ q^2*(lon2-lon1)^2)


其中,TOL是一个很小的数,例如1E-15。pi是圆周率。当恒向线穿过东经180度线时,这个公式会有问题。改进的公式是这样的:



dlon_W=mod(lon2-lon1,2*pi) dlon_E=mod(lon1-lon2,2*pi) dphi=log(tan(lat2/2+pi/4)/tan(lat1/2+pi/4)) if (abs(lat2-lat1) < sqrt(TOL))

{ q=cos(lat1) }

else

{ q= (lat2-lat1)/dphi } if (dlon_W < dlon_E)

{// Westerly rhumb line is the shortest tc=mod(atan2(-dlon_W,dphi),2*pi) d= sqrt(q^2*dlon_W^2 + (lat2-lat1)^2) }

else

{ tc=mod(atan2(dlon_E,dphi),2*pi) d= sqrt(q^2*dlon_E^2 + (lat2-lat1)^2) }

其中tc是方位角,mod的定义是:


mod=y - x * int(y/x) if ( mod < 0) mod = mod + x


    推荐阅读