SpringBoot基于Redis的地理位置距离计算
基于 Redis的地理位置距离计算
redis在3.2之后⽀持了地理位置距离的计算,话不多说直接开始;
⾸先需要下载redis3.2+版本
接着引⼊redis依赖:
redis:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
redis的地理位置封装对象需要的坐标依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
代码部分:
不使⽤redis提供的封装对象:
使⽤spring提供的point坐标,直接创建坐标对象,并且填⼊(key,point,name)即可
private RedisTemplate<String,String> redisTemplate;
public void geoTest(){
Long userId=556L;
String locationKey="USER_LOCATION";
springboot结构Point point =new Point(12.4,40.3);
Point point2 =new Point(32.4,10.3);
redisTemplate.opsForGeo().add(locationKey, point,"geo");
redisTemplate.opsForGeo().add(locationKey, point2,"geo2");
Distance distance = redisTemplate.opsForGeo().distance(locationKey,"geo","geo2");
System.out.println(distance);
}
使⽤redis提供的封装对象:
其实这⾥也是创建了⼀个point,封装时赋予了⼀个name⽽已本质上是⼀样的,⽤起来⽐较⿇烦点,所以我觉得point⽐较⽅便;
private RedisTemplate<String,String> redisTemplate;
public void geoTest1(){
Long userId=556L;
String locationKey="USER_LOCATION";
Point point =new Point(16.1,43.5);
GeoLocation<String> geoLocation =new GeoLocation<>("王宜a云",point);
redisTemplate.opsForGeo().add(locationKey,geoLocation);
Distance distance = redisTemplate.opsForGeo().distance(locationKey,"geo","王宜佳");
System.out.println(distance);
}
数据储存的结构:
ZSET的结构储存的;
图⽰
所以Redis的Key值我们⼀般⽤某事件或者某功能作为key,在其中使⽤value储存辨识标志,score储存坐标;⽐如
redisKey=USER_LOCATION;⽤户坐标储存⽤;
redisKey=CITY_LOCATION;城市坐标储存⽤;
其中我们⼜可以单独的储存每个个体的坐标;
API:
添加坐标点
add:【key,坐标,名称】【key,(坐标+名称)[GeoLocation]】
计算两点距离
ditance:【key,坐标名称1,坐标名称2】【key,坐标名称1,坐标名称2,单位】
查询某坐标点的坐标信息
position:【key,坐标名称】
查询某坐标点指定范围内的所有坐标点
radius:【key,GeoLocation,距离,单位(不指定默认⽶)】【key,坐标名称,距离,单位】
删除指定坐标
remove:【key,坐标名称】

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。