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(最終使用)
優點:距離自動計算,範圍查詢,誤差小,多邊形