通过两个经纬度点,算出航向.不墨迹,代码拿去就能用
import java.math.BigDecimal;
//计算航向角
public class Bearing {
/**
*
* @param lat_a 纬度1
* @param lng_a 经度1
* @param lat_b 纬度2
* @param lng_b 经度2
* @return
*/
public static double getAngle1(double lat_a, double lng_a, double lat_b, double lng_b) {
double y = Math.sin(lng_b-lng_a) * Math.cos(lat_b);
double x = Math.cos(lat_a)*Math.sin(lat_b) - Math.sin(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
double bearing = Math.atan2(y, x);
bearing = Math.toDegrees(bearing);
if(bearing < 0){
bearing = bearing +360;
}
return bearing;
}
public static void main(String[] args) {
//灯市口地铁站------东四 地铁站 1.4129872404869301
double angle1 = getAngle1(39.917099,116.41765,39.924504,116.41735);
System.out.println(360-angle1);
/*double d=360;
BigDecimal bd1 = new BigDecimal(Double.toString(d));
BigDecimal bd2 = new BigDecimal(Double.toString(angle1));
System.out.println(bd1.subtract(bd2).doubleValue()); */
//灯市口地铁站------灵境胡同地铁站 93.49151199704269
double angle5 = getAngle1(39.917099,116.41765,39.915947,116.373576);
System.out.println(360-angle5);
//灯市口地铁站------东单 地铁站 181.5137739020985
double angle2 = getAngle1(39.917099,116.41765,39.900804,116.41838);
System.out.println(360-angle2);
//灯市口地铁站------金台夕照地铁站 268.06930865160973
double angle4 = getAngle1(39.917099,116.41765,39.916671,116.461896);
System.out.println(360-angle4);
}
}
import java.math.BigDecimal;
//计算航向角
public class Bearing {
/**
*
* @param lat_a 纬度1
* @param lng_a 经度1
* @param lat_b 纬度2
* @param lng_b 经度2
* @return
*/
public static double getAngle1(double lat_a, double lng_a, double lat_b, double lng_b) {
double y = Math.sin(lng_b-lng_a) * Math.cos(lat_b);
double x = Math.cos(lat_a)*Math.sin(lat_b) - Math.sin(lat_a)*Math.cos(lat_b)*Math.cos(lng_b-lng_a);
double bearing = Math.atan2(y, x);
bearing = Math.toDegrees(bearing);
if(bearing < 0){
bearing = bearing +360;
}
return bearing;
}
public static void main(String[] args) {
//灯市口地铁站------东四 地铁站 1.4129872404869301
double angle1 = getAngle1(39.917099,116.41765,39.924504,116.41735);
System.out.println(360-angle1);
/*double d=360;
BigDecimal bd1 = new BigDecimal(Double.toString(d));
BigDecimal bd2 = new BigDecimal(Double.toString(angle1));
System.out.println(bd1.subtract(bd2).doubleValue()); */
//灯市口地铁站------灵境胡同地铁站 93.49151199704269
double angle5 = getAngle1(39.917099,116.41765,39.915947,116.373576);
System.out.println(360-angle5);
//灯市口地铁站------东单 地铁站 181.5137739020985
double angle2 = getAngle1(39.917099,116.41765,39.900804,116.41838);
System.out.println(360-angle2);
//灯市口地铁站------金台夕照地铁站 268.06930865160973
double angle4 = getAngle1(39.917099,116.41765,39.916671,116.461896);
System.out.println(360-angle4);
}
}