#### 距离的存储/检索/排序 ####

目录

矩形范围(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

缺点:例如mysql的空间索引不可以和其他普通索引做联合联合查询

2、es

https://blog.csdn.net/chushoufengli/article/details/128854473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值