4 个版本
0.1.3 | 2024 年 5 月 18 日 |
---|---|
0.1.2 | 2023 年 11 月 19 日 |
0.1.1 | 2023 年 9 月 7 日 |
0.1.0 | 2023 年 6 月 8 日 |
在 地理空间 中排名第 19
每月下载量 1,414
250KB
6K SLoC
Rust 库,用于将地理坐标从一个坐标系转换为另一个坐标系。这是 PROJ.4 项目的纯 Rust 实现。
文档可在 docs.rs 和 docs.3liz.org 上找到。
功能和限制
- Proj4rs 的目标是提供与 proj4js 库 相同的功能。
- 此端口实现了 PROJ.4 API,这意味着目前没有 3D/4D/正射变换。
- Proj4rs 的目标不是替代 PROJ,而是成为一个轻量级的从 CRS 到 CRS 的变换实现,可以在 Rust 和 WASM 环境中使用。
- 此包不提供对 WKT 的支持。相反,有一个专门的包用于将 WKT 字符串转换为 proj 字符串。
- 它旨在与
wasm32-unknown-unknown
目标兼容。 - 不需要安装外部 C 库,如
libproj
或sqlite3
。
Rust 中的基本用法
使用 proj 字符串定义坐标系,并使用 transform
函数。您可以从 EPSG.io 轻松获取任何坐标系的投影字符串。
注意: Proj4rs 使用 弧度 作为自然角单位(与原始 proj 库相同)
示例
use proj4rs;
use proj4rs::proj::Proj;
// EPSG:5174 - Example
let from = Proj::from_proj_string(concat!(
"+proj=tmerc +lat_0=38 +lon_0=127.002890277778",
" +k=1 +x_0=200000 +y_0=500000 +ellps=bessel",
" +towgs84=-145.907,505.034,685.756,-1.162,2.347,1.592,6.342",
" +units=m +no_defs +type=crs"
))
.unwrap();
// EPSG:4326 - WGS84, known to us as basic longitude and latitude.
let to = Proj::from_proj_string(concat!(
"+proj=longlat +ellps=WGS84",
" +datum=WGS84 +no_defs"
))
.unwrap();
let mut point_3d = (198236.3200000003, 453407.8560000006, 0.0);
proj4rs::transform::transform(&from, &to, &mut point_3d).unwrap();
// Note that WGS84 output from this library is in radians, not degrees.
point_3d.0 = point_3d.0.to_degrees();
point_3d.1 = point_3d.1.to_degrees();
// Output in longitude, latitude, and height.
println!("{} {}",point_3d.0, point_3d.1); // 126.98069676435814, 37.58308534678718
WKT 支持
如果您需要完整的 WKT 支持,请依赖 proj
,它提供了对标准的出色实现。
如果您想在 WASM 中使用 WKT 支持,请查看以下链接:
网格平移支持
Nadgrid 支持仍然是实验性的。目前,仅支持 Ntv2 多网格用于本地构建和 WASM。
JavaScript API
当编译为WASM时,库公开了与proj4js非常相似的JavaScript API。一个薄的JavaScript层提供了对proj4js的完全兼容性,因此可以用作proj4js的替代品。
示例
let from = new Proj.Projection("+proj=latlong +ellps=GRS80");
let to = new Proj.Projection("+proj=etmerc +ellps=GRS80");
let point = new Proj.Point(2.0, 1.0, 0.0);
// Point is transformed in place
Proj.transform(from, to, point);
编译为WASM
wasm-pack build --target web --no-default-features
如果您已安装cargo-make,请使用以下命令
cargo make wasm
运行WASM示例
存在一个index.html
文件,用于在浏览器中测试WASM模块。
出于安全原因,您需要从服务器运行它。您可以使用以下命令启动Python服务器
python3 -m http.server
服务器将自动在当前目录下提供index.html
文件。
为npm构建
cargo make wasm_bundle
这将创建一个位于pkg-bundler的npm打包包
依赖关系
~0.3–4.5MB
~71K SLoC