已知经纬度计算两点间距离
2012-06-27 09:39
369 查看
用低精度和高精度两种方法解答,两种方法的区别在于,低精度将地球看作球形,高精度将地球看作椭球。
#低精度公
float
geodist(L1, phi1,
L2, phi2)
{
Ri =
6371
d =
( Ri
*
acos(sin(phi1*(pi/180))*sin(phi2*(pi/180))
+
cos(phi1*(pi/180))*cos(phi2*(pi/180))*cos((L1
- L2)*(pi/180))))
res <-
round(d,
3)
return(res)
}
第二种高精度方案,高精度的方案的误差低于+_50m. 采用较为精密的公式,考虑到地球是一个椭球,a是地球的长轴,f是扁率,用如下公式计算
float Ctest1Dlg:: Caldistance(float lastlng,float lastlat,float curlng,float curlat)//返回的为米
{
double EarthRadiu = 6378.14;//地球半径
double temp = 1/298.257;
double F = (lastlat+curlat)/2;
double G = (lastlat - curlat)/2;
double ramda = (lastlng - curlng)/2;
double pi= 3.1415926;//pi
double S= (pow(sin(G*pi/180),2))*(pow(cos(ramda*pi/180),2)) + (pow(cos(F*pi/180),2))*(pow(sin(ramda*pi/180),2));
double C = (pow(cos(G*pi/180),2))*(pow(cos(ramda*pi/180),2)) + (pow(sin(F*pi/180),2))*(pow(sin(ramda*pi/180),2));
double omega = atan(sqrt(S/C));
double R= sqrt(S*C)/omega;
double D = 2*omega*EarthRadiu ;
double H1= (3*R-1)/(2*C);
double H2 = (3*R+1)/(2*S);
double res= 1000*D*(1 + temp*H1*(pow(sin(F*pi/180),2))*(pow(cos(G*pi/180),2)) - temp*H2*(pow(cos(F*pi/180),2))*(pow(sin(G*pi/180),2)));
return res;
}
#低精度公
float
geodist(L1, phi1,
L2, phi2)
{
Ri =
6371
d =
( Ri
*
acos(sin(phi1*(pi/180))*sin(phi2*(pi/180))
+
cos(phi1*(pi/180))*cos(phi2*(pi/180))*cos((L1
- L2)*(pi/180))))
res <-
round(d,
3)
return(res)
}
第二种高精度方案,高精度的方案的误差低于+_50m. 采用较为精密的公式,考虑到地球是一个椭球,a是地球的长轴,f是扁率,用如下公式计算
float Ctest1Dlg:: Caldistance(float lastlng,float lastlat,float curlng,float curlat)//返回的为米
{
double EarthRadiu = 6378.14;//地球半径
double temp = 1/298.257;
double F = (lastlat+curlat)/2;
double G = (lastlat - curlat)/2;
double ramda = (lastlng - curlng)/2;
double pi= 3.1415926;//pi
double S= (pow(sin(G*pi/180),2))*(pow(cos(ramda*pi/180),2)) + (pow(cos(F*pi/180),2))*(pow(sin(ramda*pi/180),2));
double C = (pow(cos(G*pi/180),2))*(pow(cos(ramda*pi/180),2)) + (pow(sin(F*pi/180),2))*(pow(sin(ramda*pi/180),2));
double omega = atan(sqrt(S/C));
double R= sqrt(S*C)/omega;
double D = 2*omega*EarthRadiu ;
double H1= (3*R-1)/(2*C);
double H2 = (3*R+1)/(2*S);
double res= 1000*D*(1 + temp*H1*(pow(sin(F*pi/180),2))*(pow(cos(G*pi/180),2)) - temp*H2*(pow(cos(F*pi/180),2))*(pow(sin(G*pi/180),2)));
return res;
}
相关文章推荐
- 已知两点经纬度,计算两点间的距离
- C# 已知经纬度计算两点距离函数
- php根据地球上任意两点的经纬度计算两点间的距离 原理
- 通过经纬度计算两点间多距离
- 根据两点经纬度计算距离
- 利用JavaScript实现的根据经纬度计算地球上两点之间的距离
- (转)根据两点经纬度计算距离
- 已知两点经纬度求距离
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- 地球经纬度计算两点距离
- 根据两点经纬度计算距离 附C#和PHP代码
- 经纬度互换、换算成米、两点的经纬度计算两点间的距离
- Gps如何根据两点(经纬度)计算直线距离
- 根据两点经纬度计算距离
- 经纬度两点之间的距离计算
- 根据经纬度,计算两点之间的距离
- Delphi 根据经纬度计算地球上两点之间的距离
- 通过两点经纬度计算两点距离的公式
- 根据两点经纬度计算距离
- 根据两点经纬度计算距离