#reverse #geocoding #actix #coordinates #kdtree #offline #latitude-longitude

app llambda/rrgeo-actix

快速、离线、反向地理编码器

1 个不稳定版本

0.1.0 2018年10月11日

220地理空间

115 个星标 & 7 个观察者

3KB
51

Rust 反向地理编码器

一个快速的反向地理编码器。受 Python reverse-geocoder 启发。

描述

rrgeo 以纬度和经度为输入,使用 k-d 树高效地查找已知位置列表中的最近邻,返回最接近的城市、国家、纬度和经度。如果您需要快速对大量坐标进行反向地理编码,或者只需要坐标的大致位置但不希望使用在线反向地理编码器的费用或复杂性,这可能会很有用。

此项目包含(通过 Cargo 工作空间)一个 ,一个 Axum REST API,一个 Actix REST API,一个 Warp REST API,以及一个命令行工具。

用法

示例用法

> 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

Web 服务器

示例用法

cargo run -p rrgeo-axum --release
cargo run -p rrgeo-actix --release
cargo run -p rrgeo-warp --release

基准测试

在 Apple M2 上进行基准测试。

  • 核心库使用 cargo benchcriterion 进行基准测试
  • 使用 oha 进行 Web 服务器基准测试

核心库

> cargo bench
time:   [154.16 ns 155.34 ns 157.00 ns]
通过 Axum 提供服务
> cargo run -p rrgeo-axum --release
>  oha https://127.0.0.1:3000/\?lat\=40\&long\=\-73 -z 5sec
Summary:
  Success rate:	100.00%
  Total:	5.0004 secs
  Slowest:	0.0099 secs
  Fastest:	0.0000 secs
  Average:	0.0002 secs
  Requests/sec:	221767.0303

  Total data:	162.86 MiB
  Size/request:	154 B
  Size/sec:	32.57 MiB

Response time histogram:
  0.000 [1]       |
  0.001 [1108827] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.002 [21]      |
  0.003 [49]      |
  0.004 [9]       |
  0.005 [4]       |
  0.006 [1]       |
  0.007 [1]       |
  0.008 [2]       |
  0.009 [1]       |
  0.010 [2]       |

Response time distribution:
  10.00% in 0.0001 secs
  25.00% in 0.0002 secs
  50.00% in 0.0002 secs
  75.00% in 0.0003 secs
  90.00% in 0.0003 secs
  95.00% in 0.0004 secs
  99.00% in 0.0005 secs
  99.90% in 0.0006 secs
  99.99% in 0.0009 secs


Details (average, fastest, slowest):
  DNS+dialup:	0.0016 secs, 0.0011 secs, 0.0019 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0002 secs

Status code distribution:
  [200] 1108918 responses
通过 Actix Web 提供服务
> cargo run --release --bin rrgeo-actix
> oha https://127.0.0.1:3000/\?lat\=40\&long\=\-73 -z 5sec
Summary:
  Success rate:	100.00%
  Total:	5.0007 secs
  Slowest:	0.2502 secs
  Fastest:	0.0000 secs
  Average:	0.0002 secs
  Requests/sec:	204563.3764

  Total data:	106.34 MiB
  Size/request:	109 B
  Size/sec:	21.26 MiB

Response time histogram:
  0.000 [1]       |
  0.025 [1021753] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.050 [432]     |
  0.075 [165]     |
  0.100 [101]     |
  0.125 [218]     |
  0.150 [266]     |
  0.175 [7]       |
  0.200 [1]       |
  0.225 [7]       |
  0.250 [12]      |

Response time distribution:
  10.00% in 0.0000 secs
  25.00% in 0.0001 secs
  50.00% in 0.0001 secs
  75.00% in 0.0001 secs
  90.00% in 0.0002 secs
  95.00% in 0.0003 secs
  99.00% in 0.0011 secs
  99.90% in 0.0323 secs
  99.99% in 0.1263 secs


Details (average, fastest, slowest):
  DNS+dialup:	0.0015 secs, 0.0012 secs, 0.0019 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0002 secs

Status code distribution:
  [200] 1022963 responses

通过 Warp 提供服务
> cargo run --release --bin rrgeo-warp
> oha https://127.0.0.1:3000/\?lat\=40\&long\=\-73 -z 5sec
SuSummary:
  Success rate:	100.00%
  Total:	5.0003 secs
  Slowest:	0.0111 secs
  Fastest:	0.0000 secs
  Average:	0.0002 secs
  Requests/sec:	232498.2550

  Total data:	170.74 MiB
  Size/request:	154 B
  Size/sec:	34.15 MiB

Response time histogram:
  0.000 [1]       |
  0.001 [1162216] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  0.002 [167]     |
  0.003 [52]      |
  0.004 [56]      |
  0.006 [56]      |
  0.007 [4]       |
  0.008 [3]       |
  0.009 [1]       |
  0.010 [1]       |
  0.011 [2]       |

Response time distribution:
  10.00% in 0.0001 secs
  25.00% in 0.0002 secs
  50.00% in 0.0002 secs
  75.00% in 0.0003 secs
  90.00% in 0.0003 secs
  95.00% in 0.0004 secs
  99.00% in 0.0004 secs
  99.90% in 0.0007 secs
  99.99% in 0.0038 secs


Details (average, fastest, slowest):
  DNS+dialup:	0.0018 secs, 0.0013 secs, 0.0025 secs
  DNS-lookup:	0.0000 secs, 0.0000 secs, 0.0005 secs

Status code distribution:
  [200] 1162559 responses

许可证

许可协议为以下之一

根据您的选择。

贡献

您有意提交以供作品包含在内的任何贡献,如Apache-2.0许可证中定义,应如上双重许可,无需任何额外的条款或条件。

依赖项

~17-32MB
~533K SLoC