2008 年 2 月,Gustavo Niemeyer 提出 geohash 並推出 geohash.org:這是一套公有領域的地理編碼系統,可將地理位置編碼成由字母與數字組成的短字串。其構想是讓座標成為可以直接寫在電子郵件、URL 或資料庫鍵值中的東西。

關鍵在於前綴所承載的階層性。geohash 將緯度與經度的位元交錯排列,並以 base32 編碼;每多一個字元就增加五位元的精度,並指向前一個儲存格 32 個子儲存格中的一個。鄰近地點通常共享前綴,而從尾端刪去字元會縮小涵蓋區域,同時讓代碼保持有效。

正是這項特性使它成為標準。Elasticsearch 的文件說明,地理點可以表示為 geohash——由交錯的緯度與經度位元組成的 base32 字串——並用於索引與網格聚合,於是鄰近搜尋就變成在既有索引上進行字串前綴搜尋。

單一字串,其前綴即代表鄰近性

前綴長度同時兼具精度與鄰近性,因此單一欄位就能同時做到兩者。

短字串比一對座標更容易分享。

既有的字串索引無須新增任何機制,就能執行地理空間工作。

以公有領域釋出,排除了任何因授權而拒絕採用的理由。

將二維問題壓縮成一維鍵值,每個既有的字串索引就成為空間索引——前綴長度同時編碼精度與鄰近性,因此無須新增任何機制。

Geohash 成為表達與索引位置的標準方式:Elasticsearch 的文件記載了 geohash 地理點與 geohash 網格聚合,而字串形式使其自然適用於快取、URL 與資料庫鍵值。它如今是地理空間索引背後的預設編碼之一。

追溯依據

參考來源

  1. Geohash (lat/lon encoding) Movable Type Scripts · movable-type.co.uk
  2. Geo-point field type Elastic · elastic.co
  3. Geohash Wikipedia · en.wikipedia.org