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