1

我正在尋找使用類似geohash的索引來存儲地理空間信息,可能使用Hilbert曲線。我的問題是關於如何最好地在這樣的索引上分割區域查詢。在地理空間索引上劃分查詢

This文章舉例說明了如何將一個區域查詢拆分爲多個查詢以避免查詢顯示較差的區域(請參閱this圖像)。如果你想用一個單一的查詢來搜索圓形區域,就像使用正常的geohash一樣使用Z曲線,你將不得不查詢整個左下象限,它只有我們關注的區域的一小部分。

在這種情況下,將搜索分爲幾個查詢會更好,但是我一直無法找到有關如何最好地執行此操作的任何信息。是否有算法將這樣的範圍查詢分割成覆蓋原始區域的較小範圍?

+0

可能會嘗試詢問gis.stackexchange.com。這是一個翹首以盼的計算器,專注於純粹的GIS。 –

+0

你爲什麼不直接使用geospatialDB?他們中有很多人,其中至少有兩人是開源的 - PostGIS(在Postgresql上)和SpatialIte(在SQLLite上) – TheSteve0

回答

0

一旦您確定了涵蓋您的查詢邊界的哈希前綴,您就可以開始將該前綴分割爲組成前綴,並在保留之前測試它們是否與查詢邊界相交。例如,假設您已將前綴0100標識爲覆蓋您的查詢區域。前綴0100包括前綴01000和01001,而前綴01000包括前綴010000和010001,前綴01001包括前綴010010和010011等。當您將前綴重寫爲較大前綴的集合(對應於更小的區域),您可以過濾掉那些不與查詢邊界相交的前綴。你必須在某個時候停止分裂過程;每次分割迭代可能使前綴集的大小增加一倍。例如,您可以創建一個最大前綴集合大小,在此點您聲明對您的過濾滿意;當然,還有其他的指標可以用來找到一個停止點。作爲最後一步,您可以重新組合「相鄰」前綴,以減少您正在執行的搜索次數。例如,如果您留下前綴01000和01001,則可以將這些前綴合併爲0100以避免搜索01000,然後搜索01001(假設搜索過程的開銷超過順序讀取的優勢) 。您將需要一個計算哈希前綴邊界框的例程,以便測試與查詢邊界的交集。這將取決於您使用的散列方案。