整理文档的时候突然发现当时外卖项目写的个工具类,先记录一下吧,万一以后会用得到
/**
* @param latA 纬度1
* @param lngA 经度1
* @param latB 纬度2
* @param lngB 经度2
* @return
*/
private static double getAngle1(double latA, double lngA, double latB, double lngB) {
double y = Math.sin(lngB - lngA) * Math.cos(latB);
double x = Math.cos(latA) * Math.sin(latB) - Math.sin(latA) * Math.cos(latB) * Math.cos(lngB - lngA);
double brng = Math.atan2(y, x);
brng = Math.toDegrees(brng);
if (brng < 0)
brng = brng + 360;
return brng;
}
/**
* 获取相差方位角
*
* @param deliveryLat 骑手纬度
* @param deliveryLng 骑手经度
* @param orderLat 身上订单用户纬度
* @param orderLng 身上订单用户经度
* @param newLat 新来订单用户纬度
* @param newLng 新来订单用户经度
* @return
*/
public static double getSubAngle(double deliveryLat, double deliveryLng, double orderLat, double orderLng, double newLat, double newLng) {
Double aAngle = getAngle1(deliveryLat, deliveryLng, orderLat, orderLng);
Double bAngle = getAngle1(deliveryLat, deliveryLng, newLat, newLng);
if (aAngle >= 90 && aAngle < 180) {
aAngle = aAngle - 90;
} else if (aAngle >= 180 && aAngle < 270) {
aAngle = aAngle - 180;
} else if (aAngle >= 270 && aAngle < 360) {
aAngle = aAngle - 270;
}
Double subAngle;
if (bAngle <= 90 && bAngle <= aAngle) {
subAngle = aAngle - bAngle;
} else if (bAngle > 270) {
subAngle = aAngle - (360 - bAngle);
} else {
subAngle = bAngle - aAngle;
}
// subAngle = aAngle + bAngle;
return subAngle;
}
有时间再优化吧,暂时先整理下来