牛奶皮子 2024-07-12 09:33 采纳率: 50%
浏览 9
已结题

求解:小程序中获取地图两点之间的距离,使用经纬度算法来写,求的距离不是直线距离吗

求解:小程序中获取地图两点之间的距离,使用经纬度算法来写,求的距离不是直线距离吗?为什么明明只有几百米的距离,算出来有几公里。

calculateDistance(lat1, lng1, lat2, lng2) {
                // lat1用户的纬度
                // lng1用户的经度
                // lat2商家的纬度
                // lng2商家的经度
                var radLat1 = this.Rad(lat1);
                var radLat2 = this.Rad(lat2);
                var a = radLat1 - radLat2;
                var b = this.Rad(lng1) - this.Rad(lng2);
                var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math
                    .pow(Math.sin(b / 2), 2)));
                s = s * 6378.137;
                s = Math.round(s * 10000) / 10000;
                s = s.toFixed(2) + '公里' //保留两位小数
                console.log('经纬度计算的距离:' + s)
                return s
            },
            Rad: function(d) { //根据经纬度判断距离
                return d * Math.PI / 180.0;
            },

  • 写回答

6条回答 默认 最新

  • 百锦再@新空间创想科技 优质创作者: 编程框架技术领域 2024-07-12 09:33
    关注

    Gpt辅助回答,我来为你把关

    // 代码示例
    function calculateDistance(lat1, lng1, lat2, lng2) {
        var radLat1 = lat1 * Math.PI / 180.0;
    var radLat2 = lat2 * Math.PI / 180.0;
    var a = radLat1 - radLat2;
    var b = (lng1 - lng2) * Math.PI / 180.0;
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * 6378.137;
    s = Math.round(s * 10000) / 10000;
    return s + '公里';
    }
    console.log('经纬度计算的距离:', calculateDistance(40.7128, -74.0060, 34.0522, -118.2437));

    该算法是根据经纬度计算两点之间的球面距禋,而不是直线距离。因为地球是一个球体,而不是一个平坦的表面,所以直线距离在地图中并不准确。通过计算经纬度之间的夹角,可以更准确地计算两点之间的距离。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 8月8日
  • 专家已采纳回答 7月31日
  • 创建了问题 7月12日