Geomesa 位置索引不准确

Posted

技术标签:

【中文标题】Geomesa 位置索引不准确【英文标题】:Geomesa Location Indexing Is Not Accurate 【发布时间】:2017-05-25 12:35:58 【问题描述】:

我正在使用 Geomesa 索引库将 3D 位置数据(经度、纬度、时间)索引到 1D 索引数据中。

这是我的 Scala 代码

var z3Indexer = new Z3SFC(TimePeriod.Month);
var z3 = z3Indexer.index(24.664152, 46.692425, 2678400)

var invertedIndex = z3Indexer.invert(z3);
println(invertedIndex._1+" "+invertedIndex._2+" "+invertedIndex._3)

问题是去索引的数据不准确,不像原始数据,我需要准确的索引,小数点后至少有相同的前 6 个数字。

程序的输出(去索引数据)

24.664232570759083 46.692474695432026 2678400

【问题讨论】:

【参考方案1】:

GeoMesa 索引是一种有损编码 - 它旨在快速缩小搜索空间以进行查询。如您所见,它精确到小数点后 3 位——大致相当于100 meters。它并不意味着完美地编码和解码位置数据。

通常,您会使用一维索引值来缩小查询范围,然后检索存储在它们旁边的确切值。

【讨论】:

【参考方案2】:

为了扩展 Emilio 的答案,GeoMesa 使用空间填充曲线方法为多维数据创建一维索引。

这是一个两步过程。第一步是选择要在每个维度中使用的位数。此选项设置曲线/索引的分辨率。

作为一个简单的示例,假设您对经度/纬度进行编码/索引,每个维度只有 1 位信息。这将创建 4 个单元格;每个都是半个半球。如果是这种情况,北半球西半部的所有数据都将在同一个桶中。

鉴于此索引中的一点,有两个操作/问题值得提出。首先是要求覆盖该点的整个边界框。第二个是在索引单元格中要求一个代表点。您提到的“反转”方法是后者。作为一个实现细节,我相信它会选择边界框的中心。这就是为什么编码和反转一个点可能会“移动”一点。

为了在像 GeoMesa 这样的系统中使用这种方法,空间范围查询需要查看空间范围所覆盖的所有单元格。 GeoMesa 和 SFCurve 中的库代码正是为此而设计的。

【讨论】:

以上是关于Geomesa 位置索引不准确的主要内容,如果未能解决你的问题,请参考以下文章

无法启动geomesa-accumulo

QGIS 与 Geomesa 或 GeoServer 的集成

一款直接时空处理分析的开源数据库---geomesa

Geomesa-Hbase集群部署

Geomesa-Hbase单机部署

geomesa hbase geoserver