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.mzph.cn/news/709483.shtml

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

相关文章

什么是存储过程和函数?它们与常规SQL查询有什么不同?描述一下MySQL的事务管理。

什么是存储过程和函数&#xff1f;它们与常规SQL查询有什么不同&#xff1f; 存储过程和函数是MySQL数据库中预编译的SQL代码块&#xff0c;它们可以被多次调用并执行特定的任务。它们与常规的SQL查询有以下几个主要的不同点&#xff1a; 预编译和执行&#xff1a;存储过程和函…

leetcode-62. 不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

云桥通+IDC数据中心:SDWAN企业组网实现高效连接案例

一、需求和背景 云桥通曾服务的一家大型跨国企业C公司&#xff0c;C公司多个数据中心分布在全球各地。为了实现数据共享和协作&#xff0c;数据中心之间需要建立稳定高效的网络连接。然而&#xff0c;传统的MPLS专线网络存在昂贵的成本和漫长的开通周期&#xff0c;无法满足企…

机器学习|线性回归

线性回归是尝试使用一条直线去拟合出图上的节点。 e i e_i ei​为第i个点构成的误差&#xff0c;使用平方的好处一是可以避免正负抵消&#xff0c;二是平方有利于放大大于1的误差的影响&#xff0c;同时缩小误差小于1的影响。 将平方项进行展开&#xff0c;以w作为变元&…

C++指针(二)

个人主页&#xff1a;PingdiGuo_guo 收录专栏&#xff1a;C干货专栏 文章目录 1.数组指针 1.1数组指针的概念 1.2数组指针的用处 1.3数组指针的操作 1.4二维数组如何访问 1.5数组指针访问流程 1.6数组指针的练习题 2.指针数组 2.1指针数组的概念 2.2指针数组的用处 2…

ChemDraw Pro 2022:呈现专业化学绘图的极 致之作 mac/win版

PerkinElmer ChemDraw Pro 2022是一款功能强大的化学绘图软件&#xff0c;专为化学家、科研工作者和教育者设计。这款软件凭借其卓越的性能和丰富的功能&#xff0c;已经成为化学绘图领域的领导者。 PerkinElmer ChemDraw Pro 2022软件获取 ChemDraw Pro 2022提供了广泛的化学…

【Chat GPT4.0】:智能对话的巅峰之作

Chat GPT4.0&#xff1a;智能对话的巅峰之作 Chat GPT4.0是基于GPT4.0架构开发的一款强大的智能对话模型&#xff0c;标志着智能对话技术的巅峰之作。本文将介绍Chat GPT4.0的创新之处以及对智能对话领域的重要意义。 Chat GPT4.0的创新之处 Chat GPT4.0在前一版本的基础上进…

接口自动化测试用例如何设计,一文搞定!

说到自动化测试&#xff0c;或者说接口自动化测试&#xff0c;多数人的第一反应是该用什么工具&#xff0c;比如&#xff1a;Python Requests、Java HttpClient、Apifox、MeterSphere、自研的自动化平台等。大家似乎更关注的是哪个工具更优秀&#xff0c;甚至出现“ 做平台的 &…

大数据开发规范-(更新版)

介绍 大数据是什么&#xff0c;大数据是指规模庞大、种类繁多且处理速度快到难以使用传统数据库和软件工具来捕捉、管理和处理的数据集合。这些数据通常包括结构化数据&#xff08;如关系数据库中的数据&#xff09;、半结构化数据&#xff08;如XML文件&#xff09;和非结构化…

【leetcode】反转链表

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家刷题&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 方法1 .将箭头方向逆转方法2. 点击查看题目 方法1 .将箭头方向逆转 思路&#xff1a; n1,n2,n3分别指…

基于Python3的数据结构与算法 - 06 topk问题

一、引入 问题&#xff1a;目前共有n个数&#xff0c;设计算法得到前k大的数。&#xff08;m<n&#xff09; 解决思路&#xff1a; 排序后切片&#xff1a;O(n*lognm) O(n*logn)排序LowB三人组&#xff1a;O(mn) 例如冒泡排序&#xff0c;交换m次&#xff0c;即可取前m…

通过QScrollArea寻找最后一个弹簧并且设置弹簧大小

项目原因&#xff0c;最近需要通过QScrollArea寻找其中最后一个弹簧并且设置大小和策略&#xff0c;因为无法直接调用UI指针&#xff0c;所以只能用代码寻找。 直接上代码&#xff1a; if (m_scrollArea){int iScrollWidth m_labelSelectedTitle->width();m_scrollArea-&g…

Hbuilderx引入旧的vue工程,如何折腾

当初在学习前端时就畏难&#xff0c;各种工具&#xff0c;框架要匹配&#xff0c;感觉比后端开发还麻烦。今日导入一旧vue工程算是见识了。工程导入hbuilderx后&#xff0c;进行npm install时出错&#xff0c;删除了node_modules试了几次无解&#xff0c;加入npm install --reg…

初学HTMLCSS——盒子模型

盒子模型 盒子&#xff1a;页面中所有的元素&#xff08;标签&#xff09;&#xff0c;都可以看做是一个 盒子&#xff0c;由盒子将页面中的元素包含在一个矩形区域内&#xff0c;通过盒子的视角更方便的进行页面布局盒子模型组成&#xff1a;内容区域&#xff08;content&…

docker部署redis

创建持久化目录 mkdir /usr/local/docker配置镜像加速器 vim /etc/docker/daemon.json {"registry-mirrors": [ "https://69cc2ccd3e5147bc910c678a088e77bc.mirror.swr.myhuaweicloud.com" ] }配置文件 vi /usr/local/docker/redis.conf #注释掉这部…

linux操作docker

docker地址 官方地址 centos7安装docker 卸载旧版本docker sudo //在前面表示以管理员权限操作yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine安装docker //安装所需资…

力扣:9. 回文数

力扣&#xff1a;9. 回文数 给你一个整数 x &#xff0c;如果 x 是一个回文整数&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 例如&#xf…

网络安全Web Hacking 101笔记,2023年最新整理!

在计算机技术如日中天的今天&#xff0c;Web安全问题也接踵而来。但Web安全却“入门简单精通难”&#xff0c;涉及技术非常多且广&#xff0c;学习阻力很大。 为此今天分享一份94页的《Web Hacking 101》笔记&#xff0c;包含Web安全知识&#xff0c;例如HTML注入、XSS、CSRF、…

二分查找讲解

关于我为什么要写单独开一篇文章写二分,实际上那么多困难的算法,比如线段树,并查集等等都没有难倒我,我最近却被二分难倒了,而且是两次,两次在赛场上做不出来二分的应用题,于是我决定写一篇二分查找的算法总结.刚接触算法的时候本来是要写一篇的,但后面因为各种原因搁置了,现在…