目录
矩形范围(mysql)
使用内置函数(mysql)
## Geohash(mysql)
## 空间索引(es/mysql/postgreSQL/mongo/redis)
矩形范围(mysql)
根据维基百科的球面计算公式,根据圆心坐标计算正方形四个点的坐标,查询正方形内的目标点。
SELECT * FROM xxx WHERE ((lat BETWEEN ? AND ?) AND (lng BETWEEN ? AND ?));
优点
简单
缺点
有误差,索引利用率不高,不易缓存,距离无序。
使用内置函数(mysql)
缺点:查询语句长,索引效率差
MySQL 和 Java 根据经纬度查询最近距离,适用于所有数据库方案 - Java开发 - 程序喵
Mysql 数据库,经纬度距离计算/经纬度范围检索 (谷歌方案) - YellosSword - 博客园
## Geohash(mysql)
Geohash算法是一种地址编码,它能把二维的经纬度编码成一维的字符串,存到mysql的一列string类型即可,查询时计算处置后再查询。
例如:东圃幼儿园的GeoHash是wtw3ued9m,查询1KM内的幼儿园时, 使用SELECT * FROM xxx WHERE 存储GeoHash的字段 like 'wtw3ued%';
go实现:geohash算法以及求最邻近区域的点-golang - Go语言中文网 - Golang中文社区
简单可控。
索引效率高。
易缓存。
通过编码精度可模糊坐标、隐私保护等。
距离无序,距离的排序需在内存二次运算得出,翻页时有点尴尬。
有误差,边界8区问题。
## 空间索引
1、mysql/postgreSQL/mongo/redis
https://blog.csdn.net/chushoufengli/article/details/128854310
2、es
https://blog.csdn.net/chushoufengli/article/details/128854473