转载来源:
地理信息系统中牵涉到各种各样的量算,例如距离、方位、面积等等。这些量算的方法或者计算繁复,或者较难找到资料,从今天开始逐渐贴出自己整理的计算方法,也作为自己的资料积累。
距离量算:
距离量算可以通过不同的方式进行:
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 shortesttc=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
本文发布于:2024-02-01 07:08:23,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674250534780.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |