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 地理空间
每月下载量 665
110KB
2K SLoC
Geoprox
Geoprox项目的独立运行时。
Geoprox 是一个内存地理空间搜索引擎,旨在实现高效的实时基于位置的配对。
它可以帮助快速识别靠近特定位置的用户或实体,非常适合需要与附近用户匹配合同的应用程序。无论是像Uber和Lyft这样的共享乘车服务,还是像Grubhub这样的配送平台,Geoprox都能提供所需的速度和精度,以增强地理感知交互。
这个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服务器和命令的行为。配置可以是任何常见格式,如 YAML
、TOML
、JSON
或 INI
。
示例用法
使用 -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_depth
和search_depth
设置控制geohashing的精度,并影响距离计算和搜索查询的性能。
优化insert_depth
更高的插入深度
- 描述:对象被分组到更小、更精确的区域。
- 影响:搜索略微变慢,但距离计算更准确。
- 用例:对于精确距离测量至关重要的场景的理想选择。
较低的插入深度
- 描述:对象被分组到较大的区域。
- 影响:搜索性能提高,但距离计算变得不那么准确。
- 用例:对于可以接受快速一般距离估计的情况最佳。
优化search_depth
更高的搜索深度
- 描述:初始搜索区域较小且更精确。
- 影响:搜索查询略微变慢,但结果更准确。
- 用例:适用于需要高精度的窄范围查询。
较低的搜索深度
- 描述:初始搜索区域较大,导致搜索更快。
- 影响:搜索速度提高,但精度可能降低。
- 用例:适用于速度优先于精度的广泛范围查询。
贡献
欢迎贡献!请参阅贡献指南获取更多信息。
许可证
本项目采用Apache 2.0或MIT许可证(您选择)。
依赖项
~23–53MB
~842K SLoC