5个版本
0.2.2 | 2024年4月3日 |
---|---|
0.2.1 | 2023年3月11日 |
0.2.0 | 2022年10月1日 |
0.1.1 | 2022年9月30日 |
0.1.0 | 2022年9月30日 |
#396 在 解析器实现
828 每月下载
40KB
665 行
geo-uri-rs
一个根据IEEE RFC 5870 设计的用于地理定位统一资源标识符(geo URIs)的Rust crate。此crate支持按照正确格式解析和生成geo URIs。其解析器目前比提议的标准更为宽松。
它支持由纬度和经度指定的地理位置,但也可选地支持高度和不确定半径。目前唯一支持的坐标参考系统是 WGS-84。
使用方法
只需运行以下命令即可将此库添加到项目中
$ cargo add geo-uri
Updating crates.io index
Adding geo-uri vX.Y.Z to dependencies.
解析
使用字符串上的 TryFrom
特性或 parse
方法将geo URI字符串解析为 GeoUri
结构体
use geo_uri::GeoUri;
let geo_uri = GeoUri::try_from("geo:52.107,5.134,3.6;u=1000").expect("valid geo URI");
assert_eq!(geo_uri.latitude(), 52.107);
assert_eq!(geo_uri.longitude(), 5.134);
assert_eq!(geo_uri.altitude(), Some(3.6));
assert_eq!(geo_uri.uncertainty(), Some(1000.0));
let geo_uri: GeoUri = "geo:52.107,5.134;u=2000.0".parse().expect("valid geo URI");
assert_eq!(geo_uri.latitude(), 52.107);
assert_eq!(geo_uri.longitude(), 5.134);
assert_eq!(geo_uri.altitude(), None);
assert_eq!(geo_uri.uncertainty(), Some(2000.0));
也可以直接调用parse函数
use geo_uri::GeoUri;
let geo_uri = GeoUri::parse("geo:52.107,5.134,3.6").expect("valid geo URI");
assert_eq!(geo_uri.latitude(), 52.107);
assert_eq!(geo_uri.longitude(), 5.134);
assert_eq!(geo_uri.altitude(), Some(3.6));
assert_eq!(geo_uri.uncertainty(), None);
生成
使用 GeoUriBuilder
构建一个 GeoUri
结构体。然后,使用 ToString
或 Display
特性生成geo URI字符串
use geo_uri::GeoUri;
let geo_uri = GeoUri::builder()
.latitude(52.107)
.longitude(5.134)
.uncertainty(1_000.0)
.build()
.unwrap();
assert_eq!(
geo_uri.to_string(),
String::from("geo:52.107,5.134;u=1000")
);
assert_eq!(
format!("{geo_uri}"),
String::from("geo:52.107,5.134;u=1000")
);
也可以使用 TryFrom
特性从坐标元组中构建一个 GeoUri
结构体
use geo_uri::GeoUri;
let geo_uri = GeoUri::try_from((52.107, 5.134)).expect("valid coordinates");
let geo_uri = GeoUri::try_from((52.107, 5.134, 3.6)).expect("valid coordinates");
特性: url
您可以通过启用 url
特性将 Url
结构体从 url
crate转换。
首先在您的 Cargo.toml
中启用特性
geo-uri = { version = "X.Y.Z", features = ["url"] }
然后您可以这样做
use geo_uri::GeoUri;
use url::Url;
let url = Url::parse("geo:52.107,5.134,3.6").expect("valid URL");
let geo_uri = GeoUri::try_from(&url).expect("valid geo URI");
let geo_url = Url::from(geo_uri);
assert_eq!(url, geo_url);
请注意,总是可以将一个 GeoUri
转换为 Url
,但反之则不总是成立!这是因为“geo:” URI 方案后面的坐标和参数的格式可能无效!
特性: serde
如果您启用了 serde
特性,GeoUri
将实现 serde::Serialize
和 serde::Deserialize
。有关更多信息,请参阅 serde 文档。
geo-uri = { version = "X.Y.Z", features = ["serde"] }
许可证
geo-uri-rs 采用了 MIT 许可证(请参阅 LICENSE
文件或 http://opensource.org/licenses/MIT)。
依赖
~0.8–1.6MB
~37K SLoC