紧急啊~!~~
请问谁知道用经纬度计算距离的公式?
我在网上找到了这条命令
d=111.12cos{ 1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB—λA)]}
其中A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。可是答案不对啊
还有 这里面的111.12是怎么算出来的?
请达人们赐教啊 !!!
请问谁知道用经纬度计算距离的公式?
我在网上找到了这条命令
d=111.12cos{ 1/[sinΦAsinΦB十 cosΦAcosΦBcos(λB—λA)]}
其中A点经度,纬度分别为λA和ΦA,B点的经度、纬度分别为λB和ΦB,d为距离。可是答案不对啊
还有 这里面的111.12是怎么算出来的?
请达人们赐教啊 !!!
则 A(x,y)的坐标可表示为(R*cosy*cosx,R*cosy*sinx,R*siny)
B(a,b)可表示为(R*cosb*cosa,R*cosb*sina,R*sinb)
于是,AB对于球心所张的角的余弦大小为
cosb*cosy*(cosa*cosx+sina*sinx)+sinb*siny=cosb*cosy*cos(a-x)+sinb*siny
因此AB两点的球面距离为
R*{arccos[cosb*cosy*cos(a-x)+sinb*siny]} 注:1.x,y,a,b都是角度,最后结果中给出的arccos因为弧度形式。
2.所谓的“东经为正,西经为负,北纬为正,南纬为负”是为了计算的方便。
比如某点为西京145°,南纬36°,那么计算时可用(-145°,-36°)
3.AB对球心所张角的球法实际上是求<OA>和<OB>两向量的夹角K。
用公式<OA>*<OB>=|OA|*|OB|*cosK
可以得到。
假设A点的经度、纬度分别为λA和ΦA, B点的经度、纬度分别为λB和ΦB,d为距离。
D = arc cos((sin北纬A×sin北纬B)+(cos北纬A×cos北纬B×cosAB两地经度差绝对值) )×地球平均半径
其中地球平均半径为6371.004 km,D的单位为km
-------------------------------------------------------
代入公式,得到你给出的甲乙两地的距离是:322.59548844824 公里(由于地球乃近似球体,所以后面精确的小数位其实并无意义)
------------------------------------------------------
至于网上流传的以下公式,经推导验证都是错误的。
D=111.12×cos-1[sinΦAsinΦB十cosΦAcosΦBcos(λB—λA)]
D = arc cos(sin北纬A×sin北纬B+cos北纬A×cos北纬B×cosAB两地经度差绝对值)÷360×2PI×6371
验证条件:
经度或者纬度只差1度时的距离为
D1 = 地球经线或赤道周长÷360
= 6371.004×2×3.1415926536÷360
= 111.19499645809008 km
约111.2千米。 被这条否决掉了
不过不明白这条公式里 arc 是什么意思
D = arc cos((sin北纬A×sin北纬B)+(cos北纬A×cos北纬B×cosAB两地经度差绝对值) )×地球平均半径
其中地球平均半径为6371.004 km,D的单位为km
private static double rad(double d)
{
return d * Math.PI / 180.0;
}public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1);
double radLat2 = rad(lat2);
double a = radLat1 - radLat2;
double b = rad(lng1) - rad(lng2);
double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a/2),2) +
Math.Cos(radLat1)*Math.Cos(radLat2)*Math.Pow(Math.Sin(b/2),2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}