WhereTZ: fast and precise timezone lookup
WhereTZ is a small gem for lookup of timezone by georgraphic coordinates.
- quite precise: uses timezone-boundary-builder, which takes source data from OpenStreetMap;
- (relatively) fast: 0.1-0.2 sec for lookup in worst cases and almost immediate lookup for best cases;
- no calls to external services, works without Internet connection;
- no keeping some 50 Mb datafiles in memory or reading them from disk for each call;
- can return timezone name string or
Install it with your usual routines (Gemfile or
gem install) as
wheretz gem. Then:
require 'wheretz' WhereTZ.lookup(50.004444, 36.231389) # (lat, lng) order # => 'Europe/Kiev' WhereTZ.get(50.004444, 36.231389) # => #<TZInfo::DataTimezone: Europe/Kiev> # you should have tzinfo gem installed, wheretz doesn't list it as dependency
From command-line, after gem installed:
wheretz 50.004444,36.231389 # => Europe/Kiev
How it works
- Latest version of timezone-boundary-builder dataset is converted into ~400
- Each of those files corresponds to one timezone; filename contains timezone name and bounding box (min and max latitude and longitude);
- On each lookup
WhereTZfirst checks provided coordinates by bounding boxes, and if only one bbox (extracted from filename) corresponds to them, returns timezone name immediately;
- If there's several intersecting bounding boxes,
WhereTZreads only relevant timezone files (which are not very large) and checks which polygon actually contains the point.
.geojsonfiles can be uneffective when called multiple times; future releases will provide option for preserve data in memory, or for mass lookup of points;
- You should note that gem has ≈50 MiB of datafiles inside;
- Data conversion performed by pretty ugly script (instead of Rake task as it should be).
Data license is ODbL.
Code license is usual MIT.