根據(jù)兩個(gè)點(diǎn)的經(jīng)緯度計(jì)算方向角和距離

A點(diǎn)經(jīng)緯度為(lat1,lng1),B點(diǎn)經(jīng)緯度坐標(biāo)為(lat2,lng2)。以A點(diǎn)為參照,計(jì)算B點(diǎn)的方向與距離

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;

原理參考:原理地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容