18 个版本
0.4.8 | 2024年4月12日 |
---|---|
0.4.7 | 2024年3月16日 |
0.4.5 | 2023年12月29日 |
0.4.4 | 2023年8月19日 |
0.1.3 | 2022年11月28日 |
#31 in 地理空间
4,069 每月下载次数
在 4 crates 中使用
155KB
387 行
tzf-rs: Rust 的快速时区查找器。
[!NOTE]
此包使用简化的形状数据,因此在大约边界处可能不完全准确。
- 发布文档: docs.rs/tzf-rs
- 最新文档(尚未发布): ringsaturn.github.io/tzf-rs
构建选项
默认情况下,会构建二进制文件。如果您不需要,可以省略默认功能并按照以下方式构建
cargo build --no-default-features
或者以以下方式添加
cargo add tzf-rs --no-default-features
最佳实践
初始化 tzf-rs 的 Finder
/FuzzyFinder
/DefaultFinder
比较昂贵,因此请考虑重用实例或将其中一个创建为全局变量。以下是一个全局变量的示例
use lazy_static::lazy_static;
use tzf_rs::DefaultFinder;
lazy_static! {
static ref FINDER: DefaultFinder = DefaultFinder::new();
}
fn main() {
print!("{:?}\n", FINDER.get_tz_name(116.3883, 39.9289));
print!("{:?}\n", FINDER.get_tz_names(116.3883, 39.9289));
}
对于重用,racemap/rust-tz-service
提供了一个很好的例子。
这里可以使用 Redis 协议演示: ringsaturn/redizone
。
性能
tzf-rs 包旨在用于高性能的地理空间查询服务,如天气预报 API。大多数查询可以在非常短的时间内返回,平均大约 3,000 纳秒(比 Go 仓库 tzf
慢 1,000 纳秒。我将继续改进这一点 - 您可以在此 跟踪进度)。
以下是一些改进性能所做的工作
- 使用预索引处理大多数查询大约需要 1000 纳秒。
- 使用精细调优的射线投射算法包
ringsaturn/geometry-rs
来验证多边形是否包含一个点。
这就是全部。tzf-rs 中没有黑魔法。
以下是全球城市(约14K个)的基准测试运行,平均每个查询约3,000纳秒。
test benches_default::bench_default_finder_random_city ... bench: 2,870 ns/iter (+/- 182)
标准结果 | 图片 |
---|---|
回归 |
您可以从 GitHub Actions 日志 中查看更多详细信息。
参考文献
我写了一篇关于 tzf
的历史、它的 Rust 端口以及其 Python 绑定的文章;您可以在 这里 查看。
- 原始 Go 仓库:
ringsaturn/tzf
- 二进制时区数据:
ringsaturn/tzf-rel
- 几何:使用
ringsaturn/geometry-rs
,它是tidwall/geometry
的 Rust 版本。 - 与其他包的连续基准比较:
ringsaturn/tz-benchmark
绑定
- Ruby,请参阅
HarlemSquirrel/tzf-rb
- Python,请参阅
ringsaturn/tzfpy
许可证
本项目采用 MIT 许可证。数据采用 ODbL 许可证,与 evansiroky/timezone-boundary-builder
相同。
依赖关系
~14MB
~69K SLoC