JAVA实现计算经纬度

问题:我们在解决经纬度问题中,会遇到这样一个问题:
 在地图上我们会 有一个A点坐标(x1,y1) 我要向某个方向 前进 d 米 到达B点,求B点的坐标,我们可以用java代码实现
 

/**
     *
     * @param lat1         变化前的经度
     * @param lon1         变化前的纬度
     * @param dirDeg       车的方向 (0~360°  其中正东方向为0° 逆时针旋转为正方向)
     * @param distance     前进的距离距离(单位m)
     * @return             修正后的经度和纬度
     */
    public static double[] calculateNewPosition(double lat1, double lon1, double dirDeg, double distance) {

        // 如果方向不是以正东方向为0° 需要自行转换角度             
   
        // 角度转换
        double dirRad = Math.toRadians(dirDeg);

        // 地球半径 单位米(m)
        double arc = 6371.393 * 1000;
        // 终点的经度坐标
        double longitude = lon1 + distance * Math.sin(dirRad) / (arc * Math.cos(lon1) * 2 * Math.PI / 360);
        // 终点的纬度坐标
        double latitude = lat1 + distance * Math.cos(dirRad) / (arc * 2 * Math.PI / 360);
        return new double[]{latitude, longitude};
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,计算经纬度和海拔之间的距离可以使用 Haversine 公式来实现。Haversine 公式可以基于给定的经纬度和海拔数据来计算两个地点之间的距离。 首先,需要确保经纬度和海拔数据以正确的格式提供。通常情况下,经纬度以度或弧度形式提供,而海拔以米为单位提供。 接下来,可以定义一个方法来计算两个坐标点之间的距离。以下是一个示例的方法实现: ```java public double calculateDistance(double lat1, double lon1, double alt1, double lat2, double lon2, double alt2) { int earthRadius = 6371; // 地球平均半径,单位为公里 // 将经纬度转换为弧度 double lat1Rad = Math.toRadians(lat1); double lon1Rad = Math.toRadians(lon1); double lat2Rad = Math.toRadians(lat2); double lon2Rad = Math.toRadians(lon2); // 使用 Haversine 公式计算两个点之间的距离 double distance = 2 * earthRadius * Math.asin(Math.sqrt(Math.pow(Math.sin((lat2Rad - lat1Rad) / 2), 2) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.pow(Math.sin((lon2Rad - lon1Rad) / 2), 2))); // 考虑海拔差异 double elevationDiff = Math.abs(alt2 - alt1); // 计算实际距离,考虑海拔差异 double actualDistance = Math.sqrt(Math.pow(distance, 2) + Math.pow(elevationDiff, 2)); return actualDistance; } ``` 以上代码中的方法可以接受两个地点的经纬度和海拔数据作为参数,并返回两个地点之间的实际距离。其中,经纬度以度为单位,海拔以米为单位。 需要注意的是,计算出的距离是直线距离,并未考虑地球的曲率和地球表面的变化。如果需要更准确的结果,可以使用更复杂的地理计算库或API。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值