美文网首页
根据两个点的经纬度计算方向角和距离

根据两个点的经纬度计算方向角和距离

作者: 芒果奶油卷 | 来源:发表于2019-10-10 15:19 被阅读0次

A点经纬度为(lat1,lng1),B点经纬度坐标为(lat2,lng2)。以A点为参照,计算B点的方向与距离

public static Object[] getAngleAndDistance(Double lat1,Double lng1,Double lat2,Double lng2){

Object[] obj =new Object[2];

double a = Math.toRadians(90-lat2);

double b = Math.toRadians(90-lat1);

double ab = Math.toRadians(lng2-lng1);

double cosc = Math.cos(a)*Math.cos(b)+Math.sin(a)*Math.sin(b)*Math.cos(ab);

if (cosc < -1.0) cosc = -1.0;

if (cosc >1.0) cosc =1.0;

double c = Math.acos(cosc);

double sinA = (Math.sin(a)*Math.sin(ab))/Math.sin(c);

if (sinA < -1.0) sinA = -1.0;

if (sinA >1.0) sinA =1.0;

double A = Math.asin(sinA);

double Aangle = Math.toDegrees(A);

if (lng2 == lng1){

if (lat2 > lat1){

obj[0] ="正北";

}else if (lat2

obj[0] ="正南";

}else{

obj[0] ="正中";

}

}else if (lat2 == lat1){

if (lng2 > lng1){

obj[0] ="正东";

}else if (lng2 < lng1){

obj[0] ="正西";

}else{

obj[0] ="正中";

}

}else if (lng2 > lng1 && lat2 > lat1){//B相对于A来说位于第一象限

  }else if (lng2 < lng1 && lat2 > lat1){//第二象限

      Aangle =360+Aangle;

}else{//第三,四象限

      Aangle =180-Aangle;

}

if (obj[0] ==null){

if (Aangle <=22.5 || Aangle >337.5){

obj[0] ="正北";

}else if (Aangle >22.5 && Aangle <=67.5){

obj[0] ="东北";

}else if (Aangle >67.5 && Aangle <=112.5){

obj[0] ="正东";

}else if (Aangle >112.5 && Aangle <=157.5){

obj[0] ="东南";

}else if (Aangle >157.5 && Aangle <=202.5){

obj[0] ="正南";

}else if (Aangle >202.5 && Aangle <=247.5){

obj[0] ="西南";

}else if (Aangle >247.5 && Aangle <=247.5){

obj[0] ="正西";

}else if (Aangle >247.5 && Aangle <=337.5){

obj[0] ="西北";

}

}

obj[1] =getDistance(lat1,lng1,lat2,lng2);

return obj;

}

getDistance:

Double radLat1 =lat1* Math.PI/180.0;

Double radLat2 =lat2* Math.PI/180.0;

Double a = radLat1 - radLat2;

Double b =lng1* Math.PI/180.0 -lng2* Math.PI/180.0;

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 *6378.137;

s = Math.round(s *10000)*1.0/10000;

原理参考:原理地址

相关文章

网友评论

      本文标题:根据两个点的经纬度计算方向角和距离

      本文链接:https://www.haomeiwen.com/subject/mwqapctx.html