• 经纬度相关计算


    最近在做经纬度相关的需求,遇到了2个需求。
    1、根据2个经纬度计算之间的距离
    2、根据1个经纬度,一个距离,求另一个经纬度
    我找了好久,没有发现能用的api,高德官方貌似也没有给java的工具文档,希望官方能支持一下这些工具文档。
    最后,在github上找到了一个开源的依赖,满足了以上需求,分享一下。

    1、开源依赖

    <dependency>
          <groupId>org.gavaghan</groupId>
          <artifactId>geodesy</artifactId>
          <version>1.1.3</version>
        </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2、根据2个经纬度计算之间的距离

    public GeodeticCurve calculateGeodeticCurve(Ellipsoid ellipsoid, GlobalCoordinates start, GlobalCoordinates end)

    3、根据一个经纬度和一个距离计算另一个经纬度

    public GlobalCoordinates calculateEndingGlobalCoordinates(Ellipsoid ellipsoid, GlobalCoordinates start, double startBearing, double distance)

    4、测试方法

    		/**
             * 根据两个经纬度计算距离
             */
            GlobalCoordinates globalCoordinatesStart = new GlobalCoordinates(Double.valueOf("58.742709"),Double.valueOf("124.332468"));
            GlobalCoordinates globalCoordinatesEnd = new GlobalCoordinates(Double.valueOf("57.753468"),Double.valueOf("123.33221"));
            GeodeticCalculator geodeticCalculator = new GeodeticCalculator();
            //第一个参数:按照球形计算经纬度
            GeodeticCurve geodeticCurve = geodeticCalculator.calculateGeodeticCurve(Ellipsoid.Sphere, globalCoordinatesStart, globalCoordinatesEnd);
            System.out.println(geodeticCurve);
    
    		输出:s=124598.1568933754;a12=208.44376950760167;a21=27.593177776351546;
    		第一个参数s=xxx就是距离,单位:米
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    		/**
             * 根据一个经纬度,一个距离,计算另一个经纬度
             */
            GlobalCoordinates globalCoordinatesSource = new GlobalCoordinates(Double.valueOf("60.742709"),Double.valueOf("120.332468"));
            //单位:米
            double distince = 1000.0;
            //第一个参数:按照球形计算经纬度
            //第三个参数:角度。0度:正北,90度:正东,180度:正南,270度:正西,其实意思就是:我们要计算哪个方向的经纬度
            GlobalCoordinates globalCoordinatesDest = geodeticCalculator.calculateEndingGlobalCoordinates(Ellipsoid.Sphere, globalCoordinatesSource, Double.valueOf("90.0"), distince);
            System.out.println(globalCoordinatesDest);
            
            输出:60.74270774009179N;120.35086910931813E;
    		第一个是纬度,第二个是经度
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    Redis对象及redisObject源码解析
    pytest框架:mark标记功能详解
    springcloud2-注册中心eureka及nacos
    After Effects 2024 v24.0.2(AE2024)
    mindspore训练retinanet时报错无法计算loss,停止训练
    创建实例化新表格及新行
    RC4Drop加密技术:原理、实践与安全性探究
    设计模式的学习
    stm32f10系列的独立看门狗与窗口看门狗
    『期末复习』计算机中常用术语
  • 原文地址:https://blog.csdn.net/qq_39839075/article/details/133191930