redis-RedisTemplate.opsForGeo 的geo地理位置及实现附近的人的功能

redis内部使用的是 zset 数据结构存储,如下

import cn.huawei.VideoApplication;
import cn.huawei.domain.Jingqu;
import cn.huawei.service.JingquService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.geo.*;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.StringRedisTemplate;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;@SpringBootTest(classes = VideoApplication.class)
public class Geo_test {@Autowiredprivate JingquService jingquService;@Autowiredprivate StringRedisTemplate stringRedisTemplate;public static final String REDIS_KEY="funplace";/*** 添加一个或多个地理位置到指定的Geo键中*/@Testpublic void test_0() {//mybatis-plus 查询出所有的景区数据List<Jingqu> list = jingquService.list();Stream<RedisGeoCommands.GeoLocation<String>> geoLocationStream = list.stream().map(jq -> {return new RedisGeoCommands.GeoLocation<String>(jq.getName(),new Point(Double.valueOf(jq.getLongitude()), Double.valueOf(jq.getLatitude())));});List<RedisGeoCommands.GeoLocation<String>> jingquList = geoLocationStream.collect(Collectors.toList());Long resultCount = stringRedisTemplate.opsForGeo().add(REDIS_KEY, jingquList);System.out.println(resultCount);}/*** 通过经纬度查找附近的景区,附近的5个景区,从近到远*/@Testvoid test_1() {Circle circle = new Circle(116.404272, 39.906277, Metrics.KILOMETERS.getMultiplier());RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(5);GeoResults<RedisGeoCommands.GeoLocation<String>> byxy = stringRedisTemplate.opsForGeo().radius(REDIS_KEY, circle, args);byxy.forEach(geoResult -> {System.out.println(geoResult);System.out.println();});}/*** 通过 某个key,地方 查找附近3km的10个景区*/@Testvoid test_2(){String k="天趣园";RedisGeoCommands.GeoRadiusCommandArgs args = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs().includeDistance().includeCoordinates().sortAscending().limit(10);GeoResults<RedisGeoCommands.GeoLocation<String>> radius = stringRedisTemplate.opsForGeo().radius(REDIS_KEY, k, new Distance(3, Metrics.KILOMETERS), args);radius.forEach(geoResult->{System.out.println(geoResult);System.out.println();});}/*** 计算两个成员之间的距离(默认以米为单位),距离单位可以是m、km、ml、ft,分别代表米、千米、英里和尺*/@Testvoid test_3(){Distance distance = stringRedisTemplate.opsForGeo().distance(REDIS_KEY, "太子林", "五色门", RedisGeoCommands.DistanceUnit.KILOMETERS);System.out.println("distance = " + distance.getValue());}/*** 获取指定成员的地理位置 坐标*/@Testvoid test_4(){//注意:GeoHash对二维经纬度坐标进行一维映射是有损的,通过映射再还原回的经纬度坐标和原始输入的经纬度坐标存在一定的误差。List<Point> position = stringRedisTemplate.opsForGeo().position(REDIS_KEY, "太子林", "五色门");position.forEach(p->{System.out.println(p);System.out.println();});}/*** 获取元素经纬度坐标经过geohash算法生成的base32编码值*/@Testvoid test_5(){List<String> hash = stringRedisTemplate.opsForGeo().hash(REDIS_KEY, "太子林", "五色门");System.out.println(hash);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/498100.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

适用于Zoom的ONLYOFFICE DocSpace应用程序可用

Zoom用户的好消息&#xff01;我们最新发布的Zoom应用程序提供了使用ONLYOFFICE DocSpace在Zoom中编辑和合著办公室文件的功能。 构建时考虑到文档协作 适用于Zoom的ONLYOFFICE DocSpace应用程序允许您与其他人一起直接在Zoom Meetings中处理任何内容&#xff1a; 创建、上传和…

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同?

制作耳机壳的UV树脂耳机壳UV胶和塑料材质有什么不同&#xff1f; 制作耳机壳的UV树脂和塑料材质在以下几个方面存在区别&#xff1a; 硬度与耐磨性&#xff1a;UV树脂具有较高的硬度和耐磨性&#xff0c;能够有效保护耳机内部零件&#xff0c;延长耳机使用寿命。而塑料材质相…

堆排序C++(Acwing)

代码&#xff1a; #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], cnt;void down(int u) {int t u;if(u * 2 < cnt && h[u * 2] < h[t]) t u * 2;if(u * 2 1 < cnt && h[u *…

【小夏送书 | 第二期】世界顶级名校计算机专业,都在用哪些书当教材?

&#x1f304;参与规则 参与方式&#xff1a;关注博主点赞收藏评论&#xff0c;&#xff08;每人最多评论三次&#xff09; 本次送书1~3本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】 活动时间至&#xff1a;2024-3-6 20:00:00 | 随机抽取由博主动态公布抽…

pyorbbecsdk奥比中光python版本SDK在Windows下环境配置笔记

1、概述 Orbbec SDK Python Wrapper基于Orbbec SDK进行设计封装&#xff0c;主要实现数据流接收&#xff0c;设备指令控制。 2、系统要求 2.1、操作系统 Windows&#xff1a;Windows 10 (x64)&#xff08;本文 针对windows&#xff09;Linux: 18.04/20.04/22.04 (x64)Arm32:…

字节面试问题

实现三列布局的方法 第一种&#xff1a;可以使用浮动margin 第二种&#xff1a;浮动BFC <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, in…

单点故障解决方案之Smart Link与Monitor Link

-SmartLink技术&#xff0c;创建Smart Link 组。在该组中&#xff0c;加入两个端口。其中1个端口是主端口&#xff0c;也称之为Master端口。另外1个端口是备份端口:也称之为 Slave 端口。 -Monitor Link 组也称之为“监控链路组&#xff0c;由上行端口和下行端口共同组成。下行…

kvm虚拟机修改网络模式

kvm修改网络模式可以直接使用virsh命令进行修改 一、查看主机 virsh list --all 二、查看需要修改主机的网络模式 virsh domiflist mysql 三、vim进行修改 cd /etc/libvirt/qemu/ vim mysql.xml 四、找到要修改的网卡部分 五、重新定义虚拟机 virsh define mysql_install.xml…

trie树(前缀树)

前缀树 1. 前缀树的的介绍2.前缀树的实现2.1插入功能2.2删除功能2.3查找前缀和查找单词功能2.4 哈希表版本 1. 前缀树的的介绍 在计算机科学中&#xff0c;trie&#xff0c;又称前缀树或字典树&#xff0c;是一种有序树&#xff0c;用于保存关联数组&#xff0c;其中的键通常是…

微服务 人工智能AI 物联网智慧工地云平台源码

目录 ​编辑 智慧工地架构 智慧工地系统 智慧工地云平台功能模块 1、基础数据管理 2、考勤管理 3、安全隐患管理 4、视频监控 5、塔吊监控 6、升降机监控 7、移动端数据推送 智慧工地管理平台子系统构成 智慧工地物联网解决方案&#xff0c;对工地施工安全人员、设…

数据库分库分表中间件选择

目前分库分表的中间件有三种设计思路&#xff0c;分别是&#xff1a; 采用分散式架构&#xff0c;适用于用Java开发的高性能轻量级OLTP应用程序&#xff0c;以Sharding-JDBC为代表。采用中间层Proxy架构&#xff0c;提供了静态输入和所有语言支持&#xff0c;适用于OLAP应用程…

毁灭交易账户的最快途径:摒弃复仇心态

虽然这听起来像是漫威宇宙最新的超级英雄传奇&#xff0c;但复仇者交易员绝不是英雄。 相反&#xff0c;复仇(报复性)交易者是让人害怕和避免的。他们是那些不承认他们的交易正在亏损&#xff0c;或者拒绝接受他们正在亏损&#xff0c;没有达到他们的日常目标的交易者。这些反英…