#coordinate #geographic #systems #convert #different #mgrs #utm

geoconvert

一个轻量级的库,用于在地理坐标系统之间进行转换

3个稳定版本

1.0.2 2024年1月23日
1.0.0 2024年1月7日

地理空间 中排名第 71

Download history 56/week @ 2024-03-10 129/week @ 2024-03-17 73/week @ 2024-03-24 145/week @ 2024-03-31 5/week @ 2024-04-07 27/week @ 2024-04-21 25/week @ 2024-04-28 7/week @ 2024-05-05 30/week @ 2024-05-12 83/week @ 2024-05-19 40/week @ 2024-05-26 63/week @ 2024-06-02 28/week @ 2024-06-09 39/week @ 2024-06-16 16/week @ 2024-06-23

每月下载量 147

MIT 许可证

74KB
1.5K SLoC

geoconvert

Latest Version Docs

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);

功能

如果您想启用 serdeSerialize/Deserialize 的兼容性,激活 serde 功能。

测试准确性

为了与GeographicLib进行比较以测试精度,您需要一个包含纬度/经度和MGRS点的数据集。我有一个包含使用Python生成并通过GeoConvert转换的约10万个点的样本数据集的gist。如果您想生成自己的数据集以验证精度,请创建名为mgrs.txtlatlon.txt的文件,其中mgrs.txt是MGRS坐标列表(每行一个)和latlon.txt是纬度和经度对的列表,每对内部以空格分隔(即类似于<纬度> <经度>)。您可以使用GeoConvert进行转换,或使用不同的来源作为基准。

一旦您有了这些文件,将它们放入tests/目录并运行

cargo test -- --include-ignored

如果geoconvert转换与基准值的距离为1毫米或更多(使用哈夫曼公式计算),则测试将失败。它还会打印平均距离误差。

依赖项

~0.7–1.3MB
~30K SLoC