rrgeo
                                
                                 rrgeo copied to clipboard
                                
                                    rrgeo copied to clipboard
                            
                            
                            
                        A fast, offline, reverse geocoder
Rust Reverse Geocoder
A fast reverse geocoder in Rust. Inspired by Python reverse-geocoder.
Links
- Crate
- Changelog
- Latest Docs
- v2.0 Docs
- v1.0 Docs
Description
rrgeo takes a latitude and longitude as input and returns the closest city, country, latitude, and longitude, using a k-d tree to efficiently find the nearest neighbour based on a known list of locations. This can be useful if you need to reverse geocode a large number of coordinates quickly, or just need the rough location of coordinates but don't want the expense or complication of an online reverse geocoder.
This crate is implemented as a library, an Actix REST API, a Warp REST API, and as a command-line utility, thanks to Cargo workspaces.
Usage
Command line search
Example usage:
> cargo run -p rrgeo-cmd --release 40 -73
0 ms to search
Location: (40.72788, -73.09761): West Sayville, New York, Suffolk County, US
Distance: 0.539337006499999
Actix Web Server
Example usage:
cargo run -p rrgeo-actix --release
Navigate to the local web server.
Warp Web Server
Example usage:
cargo run -p rrgeo-warp --release
Navigate to the local web server.
Benchmarks
Benchmarked on Apple M1.
Core library:
> cargo bench
search                  time:   [416.30 ns 416.39 ns 416.49 ns]
Served via Axum:
> cargo run -p rrgeo-axum --release
>  oha http://localhost:3000/\?lat\=40\&long\=\-73 -z 5sec
Summary:
  Success rate:	1.0000
  Total:	5.0017 secs
  Slowest:	0.0259 secs
  Fastest:	0.0000 secs
  Average:	0.0003 secs
  Requests/sec:	186333.9800
  Total data:	134.21 MiB
  Size/request:	151 B
  Size/sec:	26.83 MiB
Response time histogram:
  0.000 [19568]  |■■
  0.000 [100727] |■■■■■■■■■■■■
  0.000 [259463] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.000 [252285] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.000 [173138] |■■■■■■■■■■■■■■■■■■■■■
  0.000 [81145]  |■■■■■■■■■■
  0.001 [29013]  |■■■
  0.001 [10079]  |■
  0.001 [3434]   |
  0.001 [1350]   |
  0.001 [1789]   |
Latency distribution:
  10% in 0.0002 secs
  25% in 0.0002 secs
  50% in 0.0003 secs
  75% in 0.0003 secs
  90% in 0.0004 secs
  95% in 0.0004 secs
  99% in 0.0006 secs
Details (average, fastest, slowest):
  DNS+dialup:	0.0015 secs, 0.0012 secs, 0.0017 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0001 secs
Status code distribution:
  [200] 931991 responses
Served via Actix Web:
> cargo run --release --bin rrgeo-actix
> oha http://localhost:3000/\?lat\=40\&long\=\-73 -z 5sec
Summary:
  Success rate:	1.0000
  Total:	5.0008 secs
  Slowest:	0.2505 secs
  Fastest:	0.0000 secs
  Average:	0.0003 secs
  Requests/sec:	164159.8709
  Total data:	86.90 MiB
  Size/request:	111 B
  Size/sec:	17.38 MiB
Response time histogram:
  0.000 [395294] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.000 [209631] |■■■■■■■■■■■■■■■■
  0.000 [88554]  |■■■■■■■
  0.000 [53553]  |■■■■
  0.000 [30225]  |■■
  0.000 [13830]  |■
  0.001 [7100]   |
  0.001 [4594]   |
  0.001 [3040]   |
  0.001 [1890]   |
  0.001 [13218]  |■
Latency distribution:
  10% in 0.0000 secs
  25% in 0.0001 secs
  50% in 0.0001 secs
  75% in 0.0002 secs
  90% in 0.0003 secs
  95% in 0.0004 secs
  99% in 0.0012 secs
Details (average, fastest, slowest):
  DNS+dialup:	0.0017 secs, 0.0013 secs, 0.0020 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0003 secs
Status code distribution:
  [200] 820929 responses
Served via Warp:
> cargo run --release --bin rrgeo-warp
> oha http://localhost:3000/\?lat\=40\&long\=\-73 -z 5sec
Summary:
  Success rate:	1.0000
  Total:	5.0022 secs
  Slowest:	0.0158 secs
  Fastest:	0.0000 secs
  Average:	0.0003 secs
  Requests/sec:	183796.4070
  Total data:	132.40 MiB
  Size/request:	151 B
  Size/sec:	26.47 MiB
Response time histogram:
  0.000 [20392]  |■■
  0.000 [102885] |■■■■■■■■■■■■
  0.000 [269371] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.000 [242570] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.000 [159505] |■■■■■■■■■■■■■■■■■■
  0.000 [71758]  |■■■■■■■■
  0.001 [27128]  |■■■
  0.001 [11721]  |■
  0.001 [5919]   |
  0.001 [3213]   |
  0.001 [4918]   |
Latency distribution:
  10% in 0.0002 secs
  25% in 0.0002 secs
  50% in 0.0003 secs
  75% in 0.0003 secs
  90% in 0.0004 secs
  95% in 0.0005 secs
  99% in 0.0007 secs
Details (average, fastest, slowest):
  DNS+dialup:	0.0017 secs, 0.0010 secs, 0.0019 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0002 secs
Status code distribution:
  [200] 919380 responses
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.