rust 计算两个经纬度的距离
2024-10-21 09:36:56
依赖库
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
}
最新文章
- C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解
- docker学习(7) docker-compose使用示例
- C++程序设计(一)
- iOS 秒数转换成时间,时,分,秒
- HighCharts开发说明
- MongoDB Auto-Sharding(自动分片)入门介绍
- truncate table 和delete
- EXE文件结构及读取方法
- Combination Sum II —— LeetCode
- Hadoop SequenceFile
- 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示(转)
- 【HDU】5256 系列转换(上涨时间最长的序列修饰)
- 001-Mono for android在vs2012中发布设置
- ArrayList的add(E e)方法与扩容
- [SQL]LeetCode595. 大的国家 | Big Countries
- 工具安装(mac)
- Python turtle绘制阴阳太极图代码解析
- css3 二维码 添加 扫描特效
- Ubuntu下三种方法设置环境变量
- css选择器, first-child,first-of-type