8个版本 (4个重大更新)

新版本 0.5.0 2024年8月23日
0.4.2 2024年8月12日
0.3.1 2024年8月6日
0.2.0 2024年8月3日
0.1.0 2024年5月1日

#14 in 地理空间

Download history 123/week @ 2024-04-29 4/week @ 2024-05-20 214/week @ 2024-07-29 284/week @ 2024-08-05 167/week @ 2024-08-12

每月下载量 665

MIT/Apache

110KB
2K SLoC

Geoprox

Geoprox项目的独立运行时。

Geoprox 是一个内存地理空间搜索引擎,旨在实现高效的实时基于位置的配对。

它可以帮助快速识别靠近特定位置的用户或实体,非常适合需要与附近用户匹配合同的应用程序。无论是像Uber和Lyft这样的共享乘车服务,还是像Grubhub这样的配送平台,Geoprox都能提供所需的速度和精度,以增强地理感知交互。

在2024年5月Rust Indy.rs会议中讨论

这个crate提供了一个命令行工具,用于启动和管理Geoprox服务器。

安装

要安装 geoprox,请使用以下命令

cargo install geoprox

用法

Geoprox提供了一些命令来启动服务器和操作geohash

geoprox help
Usage: geoprox [COMMAND]

Commands:
  run     Start Geoprox server
  encode  Hash latitude/longitude into geohash
  decode  Decode geohash into approximate longitude/latitude
  spec    Generate an OpenAPI specification file
  help    Print this message or the help of the given subcommand(s)

Options:
  -h, --help     Print help
  -V, --version  Print version

入门

要开始使用Geoprox,您可以运行以下命令来启动服务器

geoprox run

您还可以直接从CLI对geohash进行编码和解码

# Encode latitude and longitude into geohash
geoprox encode --lat=37.7749 --lng=-122.4194 --depth=5

# Decode geohash into latitude and longitude
geoprox decode 9q8yy

要获取任何命令的详细帮助,请使用帮助命令

geoprox help encode

配置

Geoprox允许使用 -c--config 选项指定配置文件或设置 GEOPROX_CONFIG 环境变量。此文件可以包含各种设置,以自定义Geoprox服务器和命令的行为。配置可以是任何常见格式,如 YAMLTOMLJSONINI

示例用法

使用 -c 标志指定配置

# from current working directory
geoprox run -c geoprox.toml

# from absolute path
geoprox run -c /my/custom/config.yaml

或使用环境变量

export GEOPROX_CONFIG='/my/custom/config.json'

geoprox run

示例配置

以下是一个示例配置文件,格式为 TOML

# All settings are optional; these are the default values.
[server]
# The address the server will bind to
http_addr = '0.0.0.0'
# The port the server will listen on
http_port = 5000
# Request timeout
timeout = '10s'

[shard]
# Determines the default geohash length for inserts
insert_depth = 6
# Determines the default geohash length for searches
search_depth = 6
# Specifies the default number of results returned in range queries
default_count = 100
# Toggles the default sorting behavior for query results
default_sorted = false

[server.snapshots]
# Toggle snapshot usage
disabled = false
# Directory where snapshots will be stored
path = '/var/lib/geoprox/snapshots'
# How often snapshots will be taken
every = '30s'

环境变量

以下是目前支持的环境变量。它们将优先于配置文件中定义的设置。

环境变量 描述 默认值
GEOPROX_CONFIG 指定配置文件路径。
GEOPROX_HTTP_ADDR 服务器将绑定的地址。 0.0.0.0
GEOPROX_HTTP_PORT 服务器将监听的端口。 5000

微调

Geohashes将世界划分为网格状的单元格,每个单元格都有一个唯一的标识符(以32为基数编码)。通过改变其长度可以调整geohash的精度

  • 短的geohash代表较大的区域。
  • 长的geohash代表较小的、更精确的区域。
Geohash长度 纬度位 经度位 纬度误差 经度误差 Km误差
1 2 3 ±23 ±23 ±2,500公里(1,600英里)
2 5 5 ±2.8 ±5.6 ±630公里(390英里)
3 7 8 ±0.70 ±0.70 ±78公里(48英里)
4 10 10 ±0.087 ±0.18 ±20公里(12英里)
5 12 13 ±0.022 ±0.022 ±2.4公里(1.5英里;2,400米)
6 15 15 ±0.0027 ±0.0055 ±0.61公里(0.38英里;610米)
7 17 18 ±0.00068 ±0.00068 ±0.076公里(0.047英里;76米)
8 20 20 ±0.000085 ±0.00017 ±0.019公里(0.012英里;19米)

例如,深度为6对应于大约1公里x 1公里的geohash精度。这是默认深度,通常建议,因为更高的精度(更小的深度)可能对大多数用例不是必要的。

insert_depthsearch_depth设置控制geohashing的精度,并影响距离计算和搜索查询的性能。

优化insert_depth

更高的插入深度

  • 描述:对象被分组到更小、更精确的区域。
  • 影响:搜索略微变慢,但距离计算更准确。
  • 用例:对于精确距离测量至关重要的场景的理想选择。

较低的插入深度

  • 描述:对象被分组到较大的区域。
  • 影响:搜索性能提高,但距离计算变得不那么准确。
  • 用例:对于可以接受快速一般距离估计的情况最佳。

优化search_depth

更高的搜索深度

  • 描述:初始搜索区域较小且更精确。
  • 影响:搜索查询略微变慢,但结果更准确。
  • 用例:适用于需要高精度的窄范围查询。

较低的搜索深度

  • 描述:初始搜索区域较大,导致搜索更快。
  • 影响:搜索速度提高,但精度可能降低。
  • 用例:适用于速度优先于精度的广泛范围查询。

贡献

欢迎贡献!请参阅贡献指南获取更多信息。

许可证

本项目采用Apache 2.0MIT许可证(您选择)。

依赖项

~23–53MB
~842K SLoC