核心資料交通運輸

地理空間搜尋

在半徑或矩形範圍內找出最近的司機、門市或裝置,即時位置每隔幾秒更新一次。

或矩形搜尋
半徑
單位
km, mi, m, ft
位置更新
即時
步驟 1 / 4
司機回報位置

每次更新都會取代司機先前的位置。

範例工作階段playing
# 司機回報位置
hotkv> GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
(integer) 0

以真實 HotKV 指令與範例回覆呈現的動畫導覽。點擊任一步驟即可跳到該步驟。 指令與回覆維持英文,與您在 HotKV 中輸入及看到的完全一致。

問題

要把乘客配對給最近的司機,或把顧客配對給最近有庫存的門市,需要即時掌握數千個移動中的位置,並在毫秒內給出答案。具備空間索引的關聯式資料庫,很難應付每秒這麼多的更新。

HotKV 如何處理

位置存放在地理空間索引中。每位司機每隔幾秒用 GEOADD 更新自己的位置,GEOSEARCH 則傳回半徑或矩形範圍內的所有人,由近到遠排列並附上距離。同一個索引也能回答門市查詢與配送區域的查詢。

逐步說明

逐個指令看看發生了什麼事

  1. 01

    司機回報位置

    每次更新都會取代司機先前的位置。

    GEOADD drivers:berlin 13.4050 52.5200 driver:17 13.3889 52.5170 driver:23
  2. 02

    乘客叫車

    找出 3 公里內最近的五位司機,由近到遠排列。

    GEOSEARCH drivers:berlin FROMLONLAT 13.4000 52.5190 BYRADIUS 3 km ASC COUNT 5 WITHDIST
  3. 03

    提出載客邀請

    鎖定司機,讓兩位乘客不會叫到同一輛車。

    SET offer:driver:17 rider:42 NX EX 15
  4. 04

    到上車點的距離

    索引中兩個成員之間的距離。

    GEODIST drivers:berlin driver:17 driver:23 km
適用之處

真實世界的情境

叫車與計程車

在毫秒內找到附近的司機,並以邀請鎖防止重複派單。

外送平台

當訂單備妥時,餐廳附近的外送員會被配對上。

門市查詢

顧客會看到地圖檢視範圍內最近的門市。

內建

您能獲得什麼

即時位置

GEOADD 依經度與緯度新增或更新成員。

GEOADD

半徑與矩形搜尋

以某個點或某個成員為中心,依距離排序,並以數量限制。

GEOSEARCHGEOSEARCHSTORE

距離與位置

成員之間的距離,單位由您選擇。

GEODISTGEOPOS

底層就是一般的有序集合

可用您熟悉的有序集合指令移除成員並計數。

ZREMZCARD

常見問題

如何移除離線的司機?

地理空間索引就是有序集合,所以用 ZREM 即可移除成員。

可以在矩形內搜尋嗎?

可以。GEOSEARCH BYBOX 接受以某個點或某個成員為中心的寬度與高度。

支援哪些單位?

公尺、公里、英尺與英里。

相關使用情境

在您自己的工作負載上試試看

HotKV 支援 Redis 協定,因此您可以將現有的用戶端指向它,並執行這些相同的指令。