地理信息系统中的量算

转载来源:

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

 

你可能感兴趣的:(地理)