该方法是引用Geodesy的jar包实现
build.gradle依赖添加
implementation 'org.gavaghan:geodesy:1.1.3'
Geodesy工具类
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GeodeticCurve;
import org.gavaghan.geodesy.GlobalCoordinates;
public class GeodesyUtil {
/**
* 根据坐标算距离、方位、反方位
* @param startLng 起点经度
* @param startLat 起点纬度
* @param endLng 终点经度
* @param endLat 终点纬度
* @return
*/
public static GeodeticCurve getDistanceMeter(double startLat,double startLng,double endLat,double endLng){
GlobalCoordinates startGlobalCoordinates = new GlobalCoordinates(startLat, startLng);
GlobalCoordinates endGlobalCoordinates = new GlobalCoordinates(endLat, endLng);
GeodeticCurve geoCurve = new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.WGS84, startGlobalCoordinates, endGlobalCoordinates);
return geoCurve;
}
/**
* 根据开始坐标点,角度,计算结束点坐标
* @param startGlobalCoordinates
* @param startAngle 方向(以起点为中心)
* @param distance 距离(单位:m)
* @return
*/
public static GlobalCoordinates getGlobalCoordinates(GlobalCoordinates startGlobalCoordinates, double startAngle, double distance){
return new GeodeticCalculator().calculateEndingGlobalCoordinates(Ellipsoid.WGS84, startGlobalCoordinates, startAngle, distance);
}
public static void main(String[] args) {
GeodeticCurve distanceMeter = getDistanceMeter(39.914492,116.410593,39.909843,116.717167);
//方位
double azimuth = distanceMeter.getAzimuth();
//两点距离
double distance = distanceMeter.getEllipsoidalDistance();
System.out.println(azimuth + " " + distance);
GlobalCoordinates coordinates = getGlobalCoordinates(new GlobalCoordinates(39.914492,116.410593), azimuth, distance);
//维度
double latitude = coordinates.getLatitude();
//经度
double longitude = coordinates.getLongitude();
System.out.println(latitude + " " + longitude);//40.105261,116.398663;39.909843,116.717167
}
}