http://www.canphp.com/article/show-113.html
据说是Google地图里的Java代码结果可靠, 把它稍加改动用到VC++工程里。其中Lat表示纬度,Lng表示经度,如果遇到南纬北纬都有时一个取正值一个取负值即可,程序返回值单位是千米。 在实际应用中是多个点也就是多个折线的距离,在循环里多次调用就可以了。
#define PI 3.1415926535
double CaculateDistance(double lat1, double lng1, double lat2, double lng2)
{
double EARTH_RADIUS = 6378.137; // 地球半径
double radLat1 = lat1*PI/180; // 转化为弧度值
double radLat2 = lat2*PI/180;
double a = radLat1 - radLat2;
double b = (lng1 - lng2)*PI/180;
double s = 2 * asin(sqrt(pow(sin(a/2),2) + cos(radLat1)*cos(radLat2)*pow(sin(b/2),2)));
s = s * EARTH_RADIUS;
return s;
}