经纬度计算2021-08-26

该方法是引用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
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值