叫车服务算法
我以叫車服務為例,來分析下 LBS 應用中經緯度的存取特點。每一輛網約車都有一個編號(例如 33),
網約車需要將自己的經度信息(例如 116.034579)和緯度信息(例如 39.000452 )發給叫車應用。
這種數據記錄模式屬于一個 key(例如車 ID)對應一個 value(一組經緯度)。
我們先做第一次二分區操作,把經度區間[-180,180]分成了左分區[-180,0) 和右分區[0,180],
此時,經度值 116.37 是屬于右分區[0,180],所以,我們用 1 表示第一次二分區后的編碼值。
接下來,我們做第二次二分區:把經度值 116.37 所屬的[0,180]區間,分成[0,90) 和[90, 180]。此時,經度值 116.37 還是屬于右分區[90,180],
所以,第二次分區后的編碼值仍然為 1。
等到第三次對[90,180]進行二分區,經度值 116.37 落在了分區后的左分區[90, 135) 中,所以,第三次分區后的編碼值就是 0
按照這種方法,做完 5 次分區后,我們把經度值 116.37 定位在[112.5, 123.75]這個區間,并且得到了經度值的 5 位編碼值,即 11010。這個編碼過程如下表所示:
好了,到這里,我們就知道了,GEO 類型是把經緯度所在的區間編碼作為 Sorted Set 中元素的權重分數,把和經緯度相關的車輛 ID 作為 Sorted Set 中元素本身的值保存下來,
這樣相鄰經緯度的查詢就可以通過編碼值的大小范圍查詢來實現了。接下來,我們再來聊聊具體如何操作 GEO 類型。
總結
- 上一篇: 在进化计算中,软件进行元基编码的新陈代谢
- 下一篇: C++ 模板类与头文件