#### 距离的存储/检索/排序 ####
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
## 空间索引es/mysql/postgreSQL/mongo/redis
矩形范围mysql
根据维基百科的球面计算公式根据圆心坐标计算正方形四个点的坐标查询正方形内的目标点。
SELECT * FROM xxx WHERE ((lat BETWEEN ? AND ?) AND (lng BETWEEN ? AND ?));
优点
简单
缺点
有误差索引利用率不高不易缓存距离无序。
使用内置函数mysql
缺点:查询语句长索引效率差
MySQL 和 Java 根据经纬度查询最近距离适用于所有数据库方案 - Java开发 - 程序喵
Mysql 数据库,经纬度距离计算/经纬度范围检索 (谷歌方案) - YellosSword - 博客园
## Geohashmysql
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
缺点:例如mysql的空间索引不可以和其他普通索引做联合联合查询
2、es
https://blog.csdn.net/chushoufengli/article/details/128854473