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地理空间索引
(最终使用)
优点:距离自动计算,范围查询,误差小,多边形