Rust library for reverse geocoding. Uses data from the geonames database. http://www.geonames.org/ (http://download.geonames.org/export/dump/allCountries.zip)
Usage:
extern crate rgeo;
use rgeo::{search, nearest};
search(44.353339_f32, -72.740231_f32);
// Some((0.0001186200820000013, Record { name: "Village of Waterbury", latitude: 44.34279, longitude: -72.74294, country: "US" }))
nearest(44.353_339_f32, -72.740_231_f32, 6);
// Some([(0.00011866877, Record { name: "Village of Waterbury", latitude: 44.34279, longitude: -72.74294, country: "US" }), (0.00049654034, Record { name: "Waterbury", latitude: 44.33783, longitude: -72.75623, country: "US" }), (0.0010441553, Record { name: "Town of Waterbury", latitude: 44.38513, longitude: -72.74602, country: "US" }), (0.009455653, Record { name: "Town of Duxbury", latitude: 44.30492, longitude: -72.82456, country: "US" }), (0.0100118, Record { name: "Town of Moretown", latitude: 44.25658, longitude: -72.71475, country: "US" }), (0.010925336, Record { name: "Moretown", latitude: 44.25089, longitude: -72.76095, country: "US" })])
The offline data takes about 19M with the default settings. Locations with a population of less than 100 aren't included.
Benchmarks:
with kdtree:
search time: [1.2217 us 1.2234 us 1.2254 us]
Found 16 outliers among 100 measurements (16.00%)
3 (3.00%) high mild
13 (13.00%) high severe
with kiddo:
search time: [726.85 ns 730.24 ns 736.53 ns]
change: [-40.476% -40.291% -40.076%] (p = 0.00 < 0.05)
Performance has improved.
with kiddo and nearest_one:
search time: [490.32 ns 492.09 ns 494.60 ns]
change: [-32.854% -32.427% -31.970%] (p = 0.00 < 0.05)
Performance has improved.