7 个版本
新版本 0.2.7 | 2024年8月15日 |
---|---|
0.2.6 | 2023年8月4日 |
0.2.4 | 2023年7月26日 |
0.1.0 | 2023年7月25日 |
#1054 在 命令行工具
每月49次 下载
用于 rtz
72KB
1K SLoC
rtz
A self-contained geo lookup library / binary / server for Rust / JS (via WASM) (free server) using data from the Natural Earth and OpenStreetMap datasets.
免费服务器
服务器已部署到全球四个地区,可在 tz.twitchax.com 访问。每个地区目前可支持约 8,000 RPS,并部署到以下地区:sea、iad、ams、hkg。
此外,服务器现在将一般性地尝试在不打破 API 版本向后兼容性的情况下进行。这意味着服务器(尝试)不会更改特定 API 版本的响应格式,并且(尝试)不会从响应中删除任何字段。这并不意味着服务器不会向响应中添加字段,但它(尝试)不会删除它们。
请求的形式为 http://tz.twitchax.com/api/v1/osm/tz/{lng}/{lat}
。您还可以查看 API 文档 以探索其他端点和版本策略。
示例请求
$ curl http://tz.twitchax.com/api/v1/osm/tz/30/30
[{"id":12,"identifier":"Africa/Cairo","shortIdentifier":"EEST","offset":"UTC+03:00","rawOffset":10800,"rawBaseOffset":7200,"rawDstOffset":3600,"zone":3.0,"currentTime":"2023-07-25T23:39:59.385469400+03:00"}]
HTTPS 也可用,但由于客户端和服务器性能开销以及未传输敏感数据,不推荐使用。
二进制使用
安装
Windows
$ iwr https://github.com/twitchax/rtz/releases/latest/download/rtz_x86_64-pc-windows-gnu.zip
$ Expand-Archive rtz_x86_64-pc-windows-gnu.zip -DestinationPath C:\Users\%USERNAME%\AppData\Local\Programs\rtz
Mac OS (Apple Silicon)
$ curl -LO https://github.com/twitchax/rtz/releases/latest/download/rtz_aarch64-apple-darwin.zip
$ unzip rtz_aarch64-apple-darwin.zip -d /usr/local/bin
$ chmod a+x /usr/local/bin/rtz
Linux
$ curl -LO https://github.com/twitchax/rtz/releases/latest/download/rtz_x86_64-unknown-linux-gnu.zip
$ unzip rtz_x86_64-unknown-linux-gnu.zip -d /usr/local/bin
$ chmod a+x /usr/local/bin/rtz
Cargo
$ cargo install rtz
NPM
$ npm install --save rtzweb
帮助文档
$ rtz
A tool to easily work with geo lookups via a binary, a library, or a server.
Usage: rtz [COMMAND]
Commands:
ned The Natural Earth Data dataset based operations
osm The OpenStreetMap dataset based operations
dump-geojson Resolve a timezone from a lng,lat pair using the OSM dataset
serve Serve the timezone API
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
解析时区
$ rtz ned tz "-87.62,41.88"
Identifier: America/Chicago
UTC Offset: UTC-06:00
Offset Seconds: -21600
Description: Canada (almost all of Saskatchewan), Costa Rica, El Salvador, Ecuador (Galapagos Islands), Guatemala, Honduras, Mexico (most), Nicaragua,
DST Description: Canada (Manitoba), United States (Illinois, most of Texas)
使用 Wasmer 运行
wasmer run twitchax/rtz@latest -- ned tz 30,30
运行服务器
$ cargo install rtz --features web
$ rtz serve
$ docker run -it --rm -p 8082 twitchax/rtz
库使用
将此添加到您的 Cargo.toml
[dependencies]
rtz = "*" #choose a version
示例
use rtzlib::NedTimezone;
use rtzlib::CanPerformGeoLookup;
// Query a time zone for a given `(lng,lat)`.
assert_eq!(
NedTimezone::lookup(-121., 46.)[0]
.identifier
.as_ref()
.unwrap(),
"America/Los_Angeles"
);
JS 使用
npm 包可在 此处 获得。
首先,像其他任何 ES 模块一样加载模块。
import * as rtz from 'rtzweb/rtzlib.js';
然后,您可以使用库就像在 Rust 中一样。
let tz = rtz.getTimezoneNed(-121, 46);
tz.identifier; // "America/Los_Angeles"
功能标志
库和二进制文件都支持各种功能标志。以下是可用的标志
- 顶级
default= ["cli"]
full= ["tz-ned", "tz-osm", "admin-osm", "self-contained"]
- 数据集
tz-ned
:启用 Natural Earth 时区数据集和相关产生的库函数。tz-osm
:启用 OpenStreetMap 时区数据集和相关产生的库函数。admin-osm
:启用OpenStreetMap行政数据集及其相关库函数。
- 二进制配置
cli
:启用CLI功能,如果仅编译库,则可以移除。self-contained
:启用自包含功能,将数据集嵌入到二进制中构建。double-precision
:在所有地方使用f64
作为Geometry
和Polygon
数据类型,比f32
更精确但更大。unsimplified
:生成未简化的数据缓存。需要更多的二进制/内存开销,但更精确。使用原始数据集的详细程度。默认情况下,简化到0.0001
的epsilon(通常是)。extrasimplified
:生成额外简化的数据缓存。需要更少的二进制/内存开销,但精度较低。将简化epsilon设置为0.01
(通常是)。owned-decode
:在bincode
包的decode
功能中使用owned
而不是borrow
。这通过不直接从二进制映射数据来增加内存占用,但安全性较低/暗黑魔法较少。
- 特殊修饰符
wasm
:启用WASM功能,需要通过wasm-pack
构建NPM包或生成wasi
二进制文件。web = ["full"]
:启用serve
子命令,该命令启动一个Rocket Web服务器,可以响应用时区请求。
- 其他注意事项
wasm
/wasi
构建目前与reqwest
和zip
不兼容,因此wasm
/wasi
构建需要self-contained
功能。
数据更新
最后更新是在2024.08.08进行的。该日期的数据源如下
- OSM Admin Data。这些数据是从OSM星球文件下载的,然后本地处理以提取行政边界。
- OSM TZ Data。这些数据是从时区边界构建器的最新生成版本中下载的,并由本代码自动处理。
- NED TZ Data。这些数据是从NED向量仓库的
master
分支下载的,并由本代码自动处理。
性能
一般
该实现通过采用二进制缓存以性能换取二进制大小,通过二进制缓存提高了平均时区解析能力约96倍,最坏情况下的解析能力约10倍。使用OSM数据集时,平均时区查找时间为约930 ns
,使用NED数据集时约为460 ns
。最坏情况下的查找时间约为6 - 10 μs
。
平均而言,对于随机城市,使用OSM数据集的查找时间约为1.5 μs
,使用NED数据集的查找时间约为400 ns
。
免费服务器
以下是从(lng,lat)
对解析到一个数据中心的时间区的一个示例性能,使用1000个并发连接,达到每秒8000次请求(RPS)。
以下是从(lng,lat)
对解析到一个数据中心的时间区的一个示例性能,使用100个并发连接,平均响应时间约为24 ms
。
测试
cargo test --features web
基准测试
cargo bench --features web
许可证
MIT
依赖项
~12–28MB
~363K SLoC