公式:select (2 * 6378.137* ASIN(SQRT(POW(SIN(PI() * (lat1 - lat2)/360), 2) + COS(PI() * lat1 / 180)
* COS(lat2 * PI() / 180) * POW(SIN(PI() * (lng1 - lng2) / 360), 2)))) as 'num'
摘处:http://hi.baidu.com/xzp19841203/item/8172e5f7288ac2df6225d203
谷歌计算原理:
从google maps的脚本里扒了段代码,没准啥时会用上。大家一块看看是怎么算的。
private const double EARTH_RADIUS = 6378.137;
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;
}
摘处:http://panyee.cnblogs.com/archive/2006/07/04/442771.html
@time: 2013-01-11 18:08:14
Tips:单位km
浙公网安备 33010602011771号