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 地理空间

Download history 1745/week @ 2024-03-14 1756/week @ 2024-03-21 2215/week @ 2024-03-28 1707/week @ 2024-04-04 1615/week @ 2024-04-11 1883/week @ 2024-04-18 1888/week @ 2024-04-25 1647/week @ 2024-05-02 1256/week @ 2024-05-09 1668/week @ 2024-05-16 1521/week @ 2024-05-23 1551/week @ 2024-05-30 1622/week @ 2024-06-06 1590/week @ 2024-06-13 1509/week @ 2024-06-20 1323/week @ 2024-06-27

6,304 每月下载量
用于 2 crates

MIT 许可证

44KB
838

nav-types

Build Status Crates.io

本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