Geohash边界框搜索

时间:2013-01-30 18:06:19

标签: algorithm data-structures geolocation geospatial

我想做一个边界框查询地理位置字符串的Trie,其中点位于空间的中心周围。当点跨越中心点时,我似乎找不到查询trie的好方法。

假设在16x16空间中每个坐标(总共8个)有4位信息,每个框为1x1。基本上,一个16x16网格。

红线表示在geohash中使用的四叉树的最大部分。

Example image

表示上面的图形。

bits=4, min=0, max=16, numBuckets=16.0, scaling=1.0, tree={
└── null
    ├── 0
    │   ├── (0110100) 00110100 = {(6, 6), hash=00110100}
    │   └── (1100000) 01100000 = {(6, 8), hash=01100000}
    └── 1
        ├── (0010101) 10010101 = {(8, 7), hash=10010101}
        └── (1000010) 11000010 = {(9, 8), hash=11000010}

边界框查询定义为左上角和长度,宽度。 例如(6,6 4x4)应该返回6,6 6,8 8,7和9,8。

我想到的一种方法是:从包含左上角坐标的最精确的方框开始,并保持不那么精确,直到我可以覆盖4x4方形。但是如果我这样做,我最终会在这个例子中查询整棵树。我只是没有看到“更好”的方式来做到这一点。

1 个答案:

答案 0 :(得分:1)

如果您可以向trie结构的节点添加额外信息,我会忽略GeoHash编码并将其视为任意树结构。从叶子开始工作,您可以计算每个节点周围的边界框,该边界框仅包围该节点下的所有点。然后,当您从上到下搜索某个点(或区域)时,如果某个节点的边界框未包含(或相交)您的查询点(或区域),则可以停止在该节点上搜索。

如果您能够保持更新,那么当您的搜索点或区域不在(或不相交)包围实际位于某个节点下方的所有点的边界框时,您将获得,即使搜索点或区域可以重叠某些点,理论上GeoHash可以到那个区域。