距离(米)= SQRT(pow(6370693.5 * COS(weidu1*pi()/180)*(if((jingdu1*pi()/180-jingdu2*pi()/180)>pi(),2*pi()-(jingdu1*pi()/180-jingdu2*pi()/180),(if((jingdu1*pi()/180-jingdu2*pi()/180)<-pi(),2*pi()+(jingdu1*pi()/180-jingdu2*pi()/180),(jingdu1*pi()/180-jingdu2*pi()/180))))),2) + pow(6370693.5 * (weidu1 * pi()/180 - weidu2*pi()/180),2));
java代码:
public static void GetShortDistance(double jingdu1, double weidu1, double jingdu2, double weidu2) {
double jing1弧度, wei1弧度, jing2弧度, wei2弧度;
double dx, dy, 经度差;
double distance;
// 角度转换为弧度
jing1弧度 = jingdu1 * DEF_PI180;
wei1弧度 = weidu1 * DEF_PI180;
jing2弧度 = jingdu2 * DEF_PI180;
wei2弧度 = weidu2 * DEF_PI180;
// 经度差
经度差 = jing1弧度 - jing2弧度;
// 若跨东经和西经180 度,进行调整
if (经度差 > PI)
经度差 = DEF_2PI - 经度差;
else if (经度差 < -PI)
经度差 = DEF_2PI + 经度差;
dx = DEF_R * Math.cos(wei1弧度) * 经度差; // 东西方向长度(在纬度圈上的投影长度)
dy = DEF_R * (wei1弧度 - wei2弧度); // 南北方向长度(在经度圈上的投影长度)
// 勾股定理求斜边长
distance = Math.sqrt(dx * dx + dy * dy);
System.out.println(distance);
}