11次发布
0.5.2 | 2023年7月10日 |
---|---|
0.5.1 | 2020年10月12日 |
0.5.0 | 2020年4月15日 |
0.4.4 | 2020年3月9日 |
0.2.0 | 2016年8月17日 |
#24 in 地理空间
6,304 每月下载量
用于 2 crates
44KB
838 行
nav-types
本crate旨在轻松处理具有地理实体意义的坐标和向量。
示例
将此放入您的 Cargo.toml
nav-types = "0.5.2"
并使用它计算向量和位置
extern crate nav_types;
use nav_types::WGS84;
let pos_a = WGS84::from_degrees_and_meters(36.12, -86.67, 0.0);
let pos_b = WGS84::from_degrees_and_meters(33.94, -118.40, 0.0);
println!("Distance between a and b: {:.2}m", a.distance(&b));
所有位置格式都可以与向量一起工作,只要向量定义在某个坐标系中。
use nav_types::{WGS84, ENU};
let pos_a = WGS84::from_degrees_and_meters(36.12, -86.67, 0.0);
let vec = ENU::new(0.0, 0.0, 10.0);
let pos_a_10m_up = pos_a + vec;
// Or with `NED` vector
let ned_vec = NED::new(0.0, 0.0, -10.0);
let pos_a_10m_up_2 = pos_a + ned_vec;
使用说明
源代码基于 nalgebra
,并且只有导入来自 nalgebra
的特质时,某些方法才可用。
性能
目前计算经纬度位置之间向量的唯一方法是将它们转换为 ECEF
格式并在那里计算差值。这种转换在幕后发生,因此可能会引起一些意外。因此建议尽可能长时间地只使用 ECEF
格式,仅在开始和结束时进行转换。
在我的笔记本电脑上(不同机器上的绝对数字会有所不同,但相对差异应该相似)
running 10 tests
test ecef::add_vector ... bench: 1,321 ns/iter (+/- 21)
test ecef::difference ... bench: 1,306 ns/iter (+/- 16)
test ecef::from_nvector ... bench: 21 ns/iter (+/- 1)
test ecef::from_wgs84 ... bench: 492 ns/iter (+/- 23)
test nvector::add_vector ... bench: 1,486 ns/iter (+/- 61)
test nvector::difference ... bench: 1,352 ns/iter (+/- 230)
test nvector::from_ecef ... bench: 144 ns/iter (+/- 3)
test nvector::from_wgs84 ... bench: 382 ns/iter (+/- 16)
test wgs84::add_vector ... bench: 2,154 ns/iter (+/- 302)
test wgs84::difference ... bench: 2,305 ns/iter (+/- 304)
依赖关系
~3MB
~60K SLoC