查詢經緯度距離的幾種解決方法

1. 矩形算法,基於mysql
          實現:1。根據維基百科的球面計算公式,根據圓心座標計算正方形四個點的座標,查詢正方形內的目標點
                    2。對ck_baidu表的lat和lng字段加上聯合索引
                    3。SELECT * FROM ck_baidu WHERE ((lat BETWEEN ? AND ?) AND (lng      BETWEEN ? AND ?));
          優點:簡單,快捷
          缺點:有誤差,索引利用率不高,不易緩存,距離無序,數據不完全精確

2.GeoHash,基於mysql
          實現:1。把經緯度切分爲小塊字符串,次數越多,越精確,可以理解爲把二維的經緯度編碼爲一緯的字符串
                    2。增加ck_baidu表的GeoHash字段,存放幼兒園的GeoHash,例如:東圃幼兒園的GeoHash是,wtw3ued9m
                    3。查詢1KM內的幼兒園,SELECT * FROM ck_baidu WHERE GeoHash like 'wtw3ued%';
          優點:維護一列字段,索引利用率高,易緩存
          缺點:有誤差,距離無序,數據不完全精確

3.  MySQL空間數據庫,OpenGIS,百萬級
          優點:官方解決方案,精確
          缺點:需要轉換經緯度
     
4.  MongoDB(最終使用)
          優點:距離自動計算,範圍查詢,誤差小,多邊形
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章