3个稳定版本
1.0.2 | 2024年1月23日 |
---|---|
1.0.0 | 2024年1月7日 |
在 地理空间 中排名第 71
每月下载量 147
74KB
1.5K SLoC
geoconvert
geoconvert
是一个轻量级的库,用于在不同地理坐标系统之间进行转换。目前,已实现了三个坐标系统:
LatLon
UtmUps
Mgrs
此库的实现是将 C++ 的 GeographicLib 的一个子集翻译成 Rust。具体来说,geoconvert
实现了 GeoConvert 命令行工具的一些功能。
用法
您可以使用结构的 create()
函数手动创建坐标,然后使用 to_*
/from_*
方法转换为其他类型。
use geoconvert::{LatLon, Mgrs, UtmUps};
// This returns a result. When calling `create()`, the arguments are validated to ensure only a valid
// coordinate gets created.
let coord = LatLon::create(40.748333, -73.985278).unwrap();
// Convert to a UTM/UPS coordinate
let coord_utm = coord.to_utmups();
let coord_utm = UtmUps::from_latlon(&coord);
// Convert to an MGRS coordinate
// Note that for MGRS you must specify the precision
let coord_mgrs = coord.to_mgrs(6);
let coord_mgrs = Mgrs::from_latlon(&coord, 6);
功能
如果您想启用 serde
与 Serialize
/Deserialize
的兼容性,激活 serde
功能。
测试准确性
为了与GeographicLib进行比较以测试精度,您需要一个包含纬度/经度和MGRS点的数据集。我有一个包含使用Python生成并通过GeoConvert转换的约10万个点的样本数据集的gist。如果您想生成自己的数据集以验证精度,请创建名为mgrs.txt
和latlon.txt
的文件,其中mgrs.txt
是MGRS坐标列表(每行一个)和latlon.txt
是纬度和经度对的列表,每对内部以空格分隔(即类似于<纬度> <经度>
)。您可以使用GeoConvert进行转换,或使用不同的来源作为基准。
一旦您有了这些文件,将它们放入tests/
目录并运行
cargo test -- --include-ignored
如果geoconvert
转换与基准值的距离为1毫米或更多(使用哈夫曼公式计算),则测试将失败。它还会打印平均距离误差。
依赖项
~0.7–1.3MB
~30K SLoC