rust 计算两个经纬度的距离

依赖库

math_adapter={ version = "0.3.1", features = [ "cgmath_ops" ] }

实现

use math_adapter::plugin::cgmath::own::num_traits::{
    float::FloatCore, 
    Float,
};
/// 计算两个坐标之间的距离
/// lon1:经度1,
/// lat1:纬度1,
/// lon2:经度1,
/// lat2:纬度1
async fn haversine(lon1: f64, lat1: f64, lon2: f64, lat2: f64) -> f64 {
    let lon1 = FloatCore::to_radians(lon1);
    let lat1 = FloatCore::to_radians(lat1);
    let lon2 = FloatCore::to_radians(lon2);
    let lat2 = FloatCore::to_radians(lat2);
    
    let dlon = lon2 - lon1;
    let dlat = lat2 - lat1;

    let s_dlat = Float::sin(dlat / 2.0);
    let s_dlon = Float::sin(dlon / 2.0);

    let a = s_dlat * s_dlat
                + Float::cos(lat1)
                * Float::cos(lat2)
                * s_dlon * s_dlon ;
    let c = 2.0 * Float::asin(Float::sqrt(a));
    let r = 6371.0;  // 地球平均半径,单位为公里
    c * r * 1000.0
}
posted @   hziwei  阅读(119)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示