地图的电子围栏功能的技术选型
需求說(shuō)明
電子圍欄
現(xiàn)有解決方案
- mysql 自定義函數(shù)計(jì)算
- mysql geo索引
- mongodb geo索引
- postgresql PostGis索引
- redis geo
- ElasticSearch
- 高德地圖開(kāi)放接口
最終選型結(jié)果mongodb
技術(shù)選型簡(jiǎn)要分析
mysql
搜索資料極少,看來(lái)很少有人選用
mysql 8 之前版本
但使用SQL語(yǔ)句進(jìn)行查詢的缺點(diǎn)也顯而易見(jiàn),每條SQL的計(jì)算量都會(huì)非常大,有時(shí)候要十幾秒才能出結(jié)果,性能將會(huì)是嚴(yán)重的問(wèn)題。
mysql 8
mysql 有專門(mén)支持位置的存儲(chǔ)類型 geo 索引,但是檢索依然感覺(jué)稍微復(fù)雜,并且效率還是有些問(wèn)題。
redis
添加 獲取 地理位置的坐標(biāo)。
計(jì)算兩個(gè)位置之間的距離。
根據(jù)用戶給定的經(jīng)緯度坐標(biāo)來(lái)獲取指定范圍內(nèi)的地理位置集合。
根據(jù)儲(chǔ)存在位置集合里面的某個(gè)地點(diǎn)獲取指定范圍內(nèi)的地理位置集合。
缺點(diǎn):不支持多邊形,矩形 相關(guān)的搜索
Elasticsearch
? 我們經(jīng)常使用的滴滴打車,美團(tuán)送餐,美國(guó)的 Uber, Lyft 打車,還有一些交友 apps 等等,它們都是使用 Elasticsearch 進(jìn)行位置搜索
1. 找出與指定位置在給定距離內(nèi)的點(diǎn)。 2. 找出與指定點(diǎn)距離在給定最小距離和最大距離之間的點(diǎn) 3. 找出落在指定矩形框中的點(diǎn) 4. 找出落在多邊形中的點(diǎn)但是無(wú)法 根據(jù)點(diǎn)搜索 所在的多邊形
mongodb
? 可以滿足需求 查找當(dāng)前的坐標(biāo)落在哪個(gè)多邊形內(nèi)
? 網(wǎng)上搜索資料注定還是不夠健全,建議參考詳細(xì)的文檔 ,有些操作是必須加2dsphere索引的,有些非必須。整體功能還是非常強(qiáng)大的。
$geoIntersects 地理空間數(shù)據(jù)與指定GeoJSON對(duì)象.
GeoJson對(duì)象有 點(diǎn),線,單環(huán)多邊形,多環(huán)多邊形,點(diǎn)列表,線列表,集合對(duì)象體,混合類型。
意思也就是說(shuō) 可以查詢 多邊形與上述形狀 相交的集合數(shù)據(jù)
除了多邊形。還可以 $box矩形、$center圓、$centerSphere球體內(nèi)的數(shù)據(jù)集合
高德地圖-獵鷹[軌跡服務(wù)]
? 地址鏈接
? 軌跡圍欄:創(chuàng)建 更新 刪除 查詢 電子圍欄。
? 可以創(chuàng)建圍欄形狀,圓形,多邊形,線性,行政區(qū)圍欄
? 可以直接查詢指定坐標(biāo)與圍欄關(guān)系
了解到高德地圖的時(shí)候,功能已經(jīng)使用開(kāi)發(fā)完了,實(shí)際上看起來(lái)感覺(jué) 高德更加方便一些
? 缺點(diǎn) :需要上傳到云端數(shù)據(jù),和調(diào)用接口限制。
最終技術(shù)方案思路
需求簡(jiǎn)介
用戶打開(kāi)手機(jī)app 或者 小程序,獲取用戶當(dāng)前坐標(biāo),推薦附近的店鋪(可以理解為連鎖加盟)。
每一個(gè)店鋪,在地圖上劃分自己的經(jīng)營(yíng)范圍,也就是電子圍欄,有圓形,有多邊形。
疑難1:但是圓形和多邊形又是不一樣的搜索方式。
疑難2:圓形僅支持搜索圓形范圍內(nèi)的點(diǎn),但是我們現(xiàn)在需求是通過(guò)點(diǎn)搜索它在哪個(gè)圓內(nèi)。
實(shí)現(xiàn)思路:
1 多邊形:根據(jù)坐標(biāo)搜索多邊形
2 圓形:疑難2的解決思路
? 根據(jù)要搜索的當(dāng)前坐標(biāo) + 最大范圍的半徑 搜索 范圍內(nèi)的點(diǎn),在根據(jù)距離計(jì)算,當(dāng)前搜索到的點(diǎn)的半徑大于 兩點(diǎn)間的距離
具體代碼我會(huì)上傳到github上去,采用php laravel + mongo 實(shí)現(xiàn)
總結(jié)
以上是生活随笔為你收集整理的地图的电子围栏功能的技术选型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 基于51单片机来开发的智能感应开盖垃圾桶
- 下一篇: 阿里云无影云电脑ubantu中文失败解决