6 个版本
新版本 0.3.0 | 2024 年 8 月 11 日 |
---|---|
0.2.0 | 2021 年 7 月 26 日 |
0.1.3 | 2020 年 12 月 13 日 |
0.1.1 | 2020 年 4 月 29 日 |
#13 在 #bounding-box
113 每月下载量
77KB
2K SLoC
时空填充曲线 Rust 库
这是从 geomesa 的 geomesa-z3 包的部分移植。
这也是从 sfcurve 的 scala 空间填充曲线库的部分移植。
此库包含用于索引点的 2D 和 3D z-order 曲线,以及用于通过边界框索引对象的 2D 和 3D 扩展 z-order 曲线。
lib.rs
:
从 Scala 基础的 geomesa-z3 库的部分移植 geomesa。部分移植 sfcurve scala 空间填充曲线库。
用于表示和查询空间对象
用于二维点索引的 Z2 曲线可以通过 SpaceFillingCurves
工厂访问。
use space_time::SpaceFillingCurves;
let curve = SpaceFillingCurves::get_point_curve(1024, -180.0, -90.0, 180.0, 90.0);
let indexed_point = curve.index(2.3522, 48.8566);
let range_of_index = curve.ranges(2.35, 48.85, 2.354, 48.857, &[]);
assert!(range_of_index
.iter()
.any(|r| r.lower() <= indexed_point && r.upper() >= indexed_point));
用于二维点和时间索引的 Z3 曲线可以通过 SpaceTimeFillingCurves
工厂访问。
use space_time::SpaceTimeFillingCurves;
let curve = SpaceTimeFillingCurves::get_point_curve(1024, -180.0, -90.0, 180.0, 90.0, 159753997829.0);
let indexed_point_in_time = curve.index(2.3522, 48.8566, 1587583997829.0); // Paris, France. April 22, 2020 as milliseconds since Unix Epoch.
let range_of_index = curve.ranges(2.3522, 48.85, 2.354, 48.857, 1587583997828.0, 1587583997828.0, &[]);
assert!(range_of_index.iter().any(|r| r.lower() <= indexed_point_in_time && r.upper() >= indexed_point_in_time));
扩展 Z-order 曲线用于非点。使用 XZ2SFC
进行非点的空间索引。
use space_time::SpaceFillingCurves;
let curve = SpaceFillingCurves::get_non_point_curve(12, -180.0, -90.0, 180.0, 90.0);
let indexed_polygon = curve.index(2.3522, 48.8466, 2.39, 49.9325);
let range_of_index = curve.ranges(2.0, 48.0, 3.0, 50.0, None);
assert!(range_of_index
.iter()
.any(|r| r.lower() <= indexed_polygon && r.upper() >= indexed_polygon));
使用 XZ3SFC
进行非点的时空索引。
use space_time::SpaceTimeFillingCurves;
let curve = SpaceTimeFillingCurves::get_non_point_curve(
12,
-180.0,
-90.0,
0.0,
180.0,
90.0,
1_893_456_000.0,
);
let indexed_polygon = curve.index(
2.3522,
48.8466,
1_556_496_000.0,
2.39,
49.9325,
1_556_496_000.0,
);
let range_of_index = curve.ranges(2.0, 48.0, 1_556_300_000.0, 3.0, 50.0, 1_557_496_000.0, None);
assert!(range_of_index
.iter()
.any(|r| r.lower() <= indexed_polygon && r.upper() >= indexed_polygon));
依赖项
~615KB
~12K SLoC