通过经纬度计算距离

  public static double getDistatce(double lat1, double lat2, double lon1,    double lon2) {
        double R = 6371;
        double distance = 0.0;
        double dLat = (lat2 - lat1) * Math.PI / 180;
        double dLon = (lon2 - lon1) * Math.PI / 180;
        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
                + Math.cos(lat1 * Math.PI / 180)
                * Math.cos(lat2 * Math.PI / 180) * Math.sin(dLon / 2)
                * Math.sin(dLon / 2);
        distance = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))) * R;
        return distance;
    }

在Uniapp中,经纬度计算距离的实现方法可以通过以下步骤达成。 首先,需要获取当前位置的经纬度。可以使用`uni.getLocation`方法来获取当前位置信息,示例代码如下: ```javascript async GetLocationInfo() { let that = this; await uni.getLocation({ type: 'gcj02', geocode: 'true', success: function(res) { console.log('当前位置的经度:' + res.longitude); console.log('当前位置的纬度:' + res.latitude); that.c = res.latitude; that.d = res.longitude; } }); } ``` 接着,运用封装好的公式函数来计算两个经纬度之间的距离。以下是一个计算距离的函数示例: ```javascript function getDistance(la1, lo1, la2, lo2) { let La1 = la1 * Math.PI / 180.0; let La2 = la2 * Math.PI / 180.0; let La3 = La1 - La2; let Lb3 = lo1 * Math.PI / 180.0 - lo2 * Math.PI / 180.0; let distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2))); distance = distance * 6378.137; distance = Math.round(distance * 10000) / 10000; return distance; } ``` 还可以根据业务需求调整距离的显示格式,示例如下: ```javascript function calculateDistance(shopPosition) { if (latitude && longitude) { const [lat, lon] = shopPosition.split(","); const cal = getFlatternDistance(latitude, longitude, Number(lat), Number(lon)); const number = Math.round(cal); if (cal > 999) { return (number / 1000).toFixed(1) + 'km '; } else { return number + 'mi '; } } else { return ''; } } ``` 在上述代码中,`GetLocationInfo`函数用于获取当前位置的经纬度,`getDistance`函数用于计算两个经纬度之间的距离,`calculateDistance`函数用于根据计算结果调整距离的显示格式 [^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值