根据两个点的经纬度查询两点的距离

最近碰到一个需求,需要根据两个点的经纬度查询两点的距离。感觉以后还会用到,所以小记一波。
一:添加Maven依赖。

 <dependency>
   <groupId>org.gavaghan</groupId>
   <artifactId>geodesy</artifactId>
   <version>1.1.3</version>
 </dependency>

二:代码实现

package io.renren.common.utils;
import org.gavaghan.geodesy.Ellipsoid;
import org.gavaghan.geodesy.GeodeticCalculator;
import org.gavaghan.geodesy.GlobalCoordinates;
import java.math.BigDecimal;
/**
 *@ClassName: DistanceUtils
 *@Description: 根据经纬度计算距离
 *@Author: jiang
 *@Date: 2021-08-06 16:56
 */
public class DistanceUtils {

    /**
     * 根据经纬度,计算两点间的距离
     * @param longitudeFrom  第一个点的经度
     * @param latitudeFrom  第一个点的纬度
     * @param longitudeTo 第二个点的经度
     * @param latitudeTo  第二个点的纬度
     * @return 返回距离 单位米
     */
    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo) {
        GlobalCoordinates source = new GlobalCoordinates(latitudeFrom, longitudeFrom);
        GlobalCoordinates target = new GlobalCoordinates(latitudeTo, longitudeTo);
        return new GeodeticCalculator().calculateGeodeticCurve(Ellipsoid.Sphere, source, target).getEllipsoidalDistance();
    }

    /**
     * 根据经纬度,计算两点间的距离
     * @param longitudeFrom  第一个点的经度
     * @param latitudeFrom  第一个点的纬度
     * @param longitudeTo 第二个点的经度
     * @param latitudeTo  第二个点的纬度
     * @param accurate  保留小数点几位
     * @return 返回距离 单位千米
     */
    public static double getDistance(double longitudeFrom, double latitudeFrom, double longitudeTo, double latitudeTo,int accurate) {
        double distance = getDistance(longitudeFrom, latitudeFrom, longitudeTo, latitudeTo);
        if (accurate < 0) {
            throw new RuntimeException("精确度必须是正整数或零");
        }
        return new BigDecimal(distance).divide(new BigDecimal(1000),accurate, BigDecimal.ROUND_HALF_UP).doubleValue();
    }
    
    public static void main(String[] args) {
        double result = getDistance(116.336116, 40.0708, 116.41235, 40.053032,0);
        System.out.println("经纬度距离计算结果:" + result+ "千米");
    }


   
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 恩,可以用余弦定理计算,比如定义两个A和B,A的经纬度分别为(A1,A2),B的经纬度分别为(B1,B2),那么方位角就是cos^(-1) (sin(A1)sin(B1)+cos(A1)cos(B1)cos(A2-B2)),距离就是arcos(sin(A1)sin(B1)+cos(A1)cos(B1)cos(A2-B2))*6371km ### 回答2: 根据两点经纬度求方位角和距离是了解两个地理位置之间的相对方向和距离的技术方法。其中,方位角表示从一个指向另一个方向的角度,而距离表示两点之间的直线距离。 计算方位角的方法是使用三角函数和向量运算。首先,将两个经纬度转换为弧度单位,然后通过正弦、余弦和反正切函数计算出两点之间的位移向量。接下来,根据位移向量的方向和大小计算出方位角。 计算距离的方法主要有球面三角法和大圆航线公式。球面三角法使用球面余弦定理或球面正弦定理来计算两点之间的大圆距离。大圆距离是沿着地球表面最短的路径,类似于飞机在天空中飞行的路径。大圆航线公式是使用圆心角和半径计算大圆距离的一种较为简单的方法。 通过应用上述方法,我们可以根据两点经纬度确定它们之间的方位角和距离。这些计算结果对于导航、航海、航空、地理信息系统等领域具有重要意义,可以帮助人们在空间上准确定位和导航。 ### 回答3: 根据给定的两个经纬度,我们可以使用球面三角学中的公式来计算它们之间的方位角和距离。 首先,我们需要将经纬度转换为弧度制。将经度和纬度转换为弧度,可以使用以下公式: 弧度经度 = 经度 * π / 180 弧度纬度 = 纬度 * π / 180 然后,根据球面三角学中的公式,我们可以计算两点之间的方位角: ∆经度 = 终经度 - 起经度 方位角 = atan2(sin(∆经度) * cos(终纬度), cos(起纬度) * sin(终纬度) - sin(起纬度) * cos(终纬度) * cos(∆经度)) 最后,计算两点之间的距离,我们可以使用球面三角学中的Haversine公式: a = sin²(∆纬度 / 2) + cos(起纬度) * cos(终纬度) * sin²(∆经度 / 2) c = 2 * atan2(√a, √(1-a)) 距离 = R * c 其中,R是地球的半径,一般使用大约6371公里或3959英里。 通过以上步骤,我们可以得到给定两点经纬度的方位角和距离。需要注意的是,方位角是相对于起的方向,距离两点之间的直线距离

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值