你作为Java后端工程师请写出计算快递经纬度代码
以下是Java后端工程师编写的计算快递经纬度代码:
public class ExpressLocationCalculator {
private static final double EARTH_RADIUS = 6371393.0; // 地球半径
/**
* 计算快递员当前位置的经纬度
*
* @param startLat 快递员出发地点的纬度
* @param startLng 快递员出发地点的经度
* @param distance 快递员已经走过的距离,单位为米
* @param direction 快递员行进的方向,取值范围为[0, 360),单位为度
* @return 快递员当前位置的经纬度
*/
public static LatLng calculate(double startLat, double startLng, double distance, double direction) {
double radian = Math.toRadians(direction); // 将方向转换为弧度
double lat1 = Math.toRadians(startLat); // 将出发地点的纬度转换为弧度
double lng1 = Math.toRadians(startLng); // 将出发地点的经度转换为弧度
double lat2 = Math.asin(Math.sin(lat1) * Math.cos(distance / EARTH_RADIUS) +
Math.cos(lat1) * Math.sin(distance / EARTH_RADIUS) * Math.cos(radian));
double lng2 = lng1 + Math.atan2(Math.sin(radian) * Math.sin(distance / EARTH_RADIUS) * Math.cos(lat1),
Math.cos(distance / EARTH_RADIUS) - Math.sin(lat1) * Math.sin(lat2));
return new LatLng(Math.toDegrees(lat2), Math.toDegrees(lng2)); // 将计算出的弧度转换为经纬度
}
}
其中,LatLng是一个表示经纬度的类,包含两个属性latitude(纬度)和longitude(经度),代码如下:
public class LatLng {
private double latitude;
private double longitude;
public LatLng(double latitude, double longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
public double getLatitude() {
return latitude;
}
public void setLatitude(double latitude) {
this.latitude = latitude;
}
public double getLongitude() {
return longitude;
}
public void setLongitude(double longitude) {
this.longitude = longitude;
}
}
使用示例:
double startLat = 39.908722;
double startLng = 116.397496;
double distance = 1000;
double direction = 45;
LatLng currentLoc = ExpressLocationCalculator.calculate(startLat, startLng, distance, direction);
System.out.println("当前位置的纬度为:" + currentLoc.getLatitude());
System.out.println("当前位置的经度为:" + currentLoc.getLongitude());
原文地址: https://www.cveoy.top/t/topic/boa2 著作权归作者所有。请勿转载和采集!