根据两个经纬度坐标计算距离

代码

/**
     * 球面直线距离
     * @param lat1  纬度
     * @param lon1  经度
     * @param alt1  高度
     * @param lat2
     * @param lon2
     * @param alt2
     * @return
     */
    public static double calculateDistance(double lat1, double lon1, double alt1,
        double lat2, double lon2, double alt2) {

        // 根据Haversine公式计算地表距离
        double distanceOnEarth = calculateSurfaceDistance(lat1, lon1, lat2, lon2);

        // 计算高度差(需要确保高度单位和地表距离单位一致,这里假设都是千米)
        double heightDifference = Math.abs(alt1/1000 - alt2/1000);

        // 使用欧几里得公式计算直线距离
        double straightLineDist = Math.sqrt(Math.pow(distanceOnEarth, 2) + Math.pow(heightDifference, 2));

        double v = new BigDecimal(straightLineDist).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return v; // 返回结果
    }

    private static final int EARTH_RADIUS = 6371; // 地球平均半径,单位为千米
    /**
     * 平面直线距离
     * @param lat1
     * @param lon1
     * @param lat2
     * @param lon2
     * @return
     */
    private static double calculateSurfaceDistance(double lat1, double lon1,
        double lat2, double lon2) {
        // 转换角度到弧度
        double lat1Radians = Math.toRadians(lat1);
        double lon1Radians = Math.toRadians(lon1);
        double lat2Radians = Math.toRadians(lat2);
        double lon2Radians = Math.toRadians(lon2);

        // 根据Haversine公式计算
        double latDiff = lat2Radians - lat1Radians;
        double lonDiff = lon2Radians - lon1Radians;
        double a = Math.pow(Math.sin(latDiff / 2), 2)
            + Math.cos(lat1Radians) * Math.cos(lat2Radians)
            * Math.pow(Math.sin(lonDiff / 2), 2);

        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        return EARTH_RADIUS * c; // 返回结果
    }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 Haversine 公式来计算两个经纬度坐标之间的距离。Haversine 公式基于球面三角形的一些性质,可以近似计算地球上两点之间的直线距离。 以下是使用 Haversine 公式计算两个经纬度坐标之间距离的 Vue 代码示例: ```javascript // 计算两个经纬度之间的距离 function getDistance(lat1, lon1, lat2, lon2) { const R = 6371; // 地球半径,单位为公里 const dLat = deg2rad(lat2 - lat1); const dLon = deg2rad(lon2 - lon1); const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); const d = R * c; // 距离,单位为公里 return d; } // 将角度转换为弧度 function deg2rad(deg) { return deg * (Math.PI / 180); } // 示例:计算北京和上海之间的距离 const distance = getDistance(39.9042, 116.4074, 31.2304, 121.4737); console.log(distance); // 输出结果:1068.3100608591576 ``` 在上面的代码中,`getDistance` 函数接受四个参数:`lat1`、`lon1`、`lat2` 和 `lon2`,分别代表两个经纬度坐标的纬度和经度。该函数先将两个经纬度坐标转换为弧度,然后根据 Haversine 公式计算两点之间的距离。最后,函数返回距离,单位为公里。 可以将上面的代码用于 Vue 项目中,例如在组件的方法中调用 `getDistance` 函数来计算两个经纬度坐标之间的距离

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值