LBS JAVA Spring mongoDB

基本介紹

位置服務(LBS)解決的主要問題是當前位置周圍某個範圍內的人或場所.
在傳統的解決方案,開發人員需要根據複雜的幾何運算與大量的SQL語句進行查找,這無疑加大的開發人員的開發難度.
現在我們需要更爲方便的解決方案,MongoDB爲我們完美解決此類LBS問題.此篇文章也主要使用SpringData,將spring與MongoDB進行整合.

二維地圖

MongoDB目前支持二維的地圖查詢,查詢區域包括圓形與矩形,距離單位包括MILES,KILOMETERS,NEUTRAL,下面的示例演示距離單位爲NEUTRAL,而實際生產應用中則會用到MILES與KILOMETERS.

MongoDB示例

首先定義一個位置集合,給定a,b,c,d節點.

接着指定location索引

現在我們可以進行簡單的GEO查詢

查詢point(0,0),半徑0.7附近的點

查詢point(0,0),半徑0.75附近的點

我們可以看到半徑不一樣,查詢出的點也不一樣,因爲c點座標爲[0.5,0.5],c至圓點的距離根據勾股定理可得出Math.sqrt(0.25 +0.25) ≈ 0.707,所以最大距離0.7時查找不到你要的點.

查詢[0.25, 0.25], [1.0,1.0]區域附近的點

Spring Data示例

spring data爲我們封裝了mongoDB訪問接口與實現,我們可以像使用hibernateTemplate一樣使用mongoTemplate.
首先我們需要像hibernate一樣定義pojo類

定義Dao,我們先使用最簡單的mongoTemplate來實現

最後我們寫一個test類

大家可以看到運行結果與我們直接在mongoDB上的一樣.

MongoRepository

MongoRepository提供了對MongoTemplate的封裝與實現,只需要繼承MongoRepository接口,填上對應的bean類與ID類型,無需實現裏面的方法即可使用,先看代碼.

然後在test類中引用此類即可,MongoRepository實現了最基本的增刪改查的功能,要想增加額外的查詢方法,可以按照以下規則定義接口的方法.
自定義查詢方法,格式爲findBy+字段名+方法名,方法傳進的參數即字段的值,此外還支持分頁查詢,通過傳進一個Pageable對象會返回Page集合.
原理相信大家也很清楚,即aop,細節就不說拉.

小提示

near與within方法區別,near方法查詢後會對結果集對distance進行排序且有大小限制,而within是無序的也無大小限制.

如果大家有新發現,也可回帖,我會及時補充.

發佈了78 篇原創文章 · 獲贊 26 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章