A Rust library to lookup timezone data based on longitude and latitude. Only focused on the offline environment, in which the system clock cannot be trusted at all (thus, no DST adjustments). Uses the Natural Earth (NED) and OpenStreetMap (OSM) datasets, pre-processed into flatgeobufs for indexed queries.
The idea and some conventions are heavily influenced by rtz, which is an awesome library that is probably fine for most people. At the time of writing, however, it only worked with nightly Rust. So I have gone forward with this much simpler implementation for stable Rust, that fits the specific use-case I am trying to solve.
# use NED
spatialtime = { version = "0.2", features = ["ned"] }
# use OSM
spatialtime = { version = "0.2", features = ["osm"] }
let response = spatialtime::osm::lookup(-77.0365, 38.8977).unwrap();
/***
* OSM dataset does not include offset, just tzid
* OsmResponse { tzid: "America/New_York" }
***/
let response = spatialtime::ned::lookup(149.1165, -35.3108).unwrap();
/***
* NED dataset will always contain offset, but might not have a tzid
* NedResponse { offset: 10.0, tzid: Some("Australia/Sydney") }
***/
OSM dataset is much larger, coming in at 17.9MB. NED is 890KB. OSM may be more "accurate" and more "up-to-date", but which one you use is likely case-by-case.
If developing / running / building from a musl environment (like Alpine), you may need to set RUSTFLAGS="-Ctarget-feature=-crt-static"
. This only seems necessary for build-assets
at this time. More info here: https://rust-lang.github.io/rfcs/1721-crt-static.html