前兩篇文章: 查找附近的xxx 球面距離以及Geohash方案探討 (http://www.wubiao.info/372) 微信、陌陌 架構方案分析 (http://www.wubiao.info/401) 探討了,LBS查找附近的XXX;其中包括了,Mysql自定義存儲函數方案,以及通過GeoHash、redis自建索引方案
前兩篇文章:
查找附近的xxx 球面距離以及Geohash方案探討 (http://www.wubiao.info/372)
微信、陌陌 架構方案分析 (http://www.wubiao.info/401)
探討了,LBS查找附近的XXX;其中包括了,Mysql自定義存儲函數方案,以及通過GeoHash、redis自建索引方案。
============================================================================================
今天分享兩種,利用GeoHash封裝成內置數據庫函數的簡易方案;
A:Mysql 內置函數方案,適合于已有業務,新增加LBS功能,增加經緯度字段方可,避免數據遷移
B:Mongodb 內置函數方案,適合中小型應用,快速實現LBS功能,性能優于A(推薦)
============================================================================================
方案A: (MySQL Spatial)
1、先簡歷一張表:(MySQL 5.0 以上 僅支持 MyISAM 引擎)
1 2 3 4 5 6 7 8 9 |
|
空間索引:
1 |
|
插入數據:(注:此處Point(緯度,經度) 標準寫法)
1 2 3 |
|
查詢: 查找(30.620076,104.067221)附近 10 公里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
============================================================================================
方案B:
1、先建立一張簡單的表user,兩條數據如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
其中,gps為二維數組,分別為經度,緯度
(注:此處必須按照(經度,緯度)順序存儲。我們平時表示經緯度,都是(緯度,精度),此處這種方式有木有很親民)
2、使用之前,先建立二維索引
//建立索引 最大范圍在經度-180~180
1 |
|
//刪除索引
1 |
|
3、Mongodb有兩中方式可以查找附近的XXX;其中方案2)會返回距離(推薦)
1)標準查詢,為地球經緯度查詢內置;參數一為查詢條件利用$near查找附近,參數二$maxDistance為經緯弧度(1° latitude = 111.12 kilometers)即 1/111.12,表示查找附近一公里。
1 |
|
2)執行命名方式,模擬成一個圓球;參數一指定geoNear方式和表名;參數二坐標,參數三是否為球形,參數四弧度(弧度=弧長/半徑 一千米的弧度1000/6378000),參數五指定球形半徑(地球半徑)
1 |
|
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com