当前位置: 首页 > news >正文

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);}}

相关文章:

  • 学会玩游戏,智能究竟从何而来?
  • HarmonyOS开发云工程与开发云函数
  • 加密与安全_探索常用编码算法
  • Vue官网“食用指南”
  • Appium手机Android自动化
  • 数据结构·顺序表实现通讯录
  • 92. 递归实现指数型枚举 刷题笔记
  • LeetCode 热题 100 | 图论(上)
  • spring boot整合cache使用memcached
  • uniapp+node.js前后端做帖子模块:获取帖子列表(社区管理平台的小程序)
  • 本科毕业设计:计及并网依赖性的分布式能源系统优化研究。(C语言实现)(内包含NSGA II优化算法)(一)
  • Mint_21.3 drawing-area和goocanvas的FB笔记(一)
  • Rust调用同级目录中的rs文件和调用下级目录中的rs文件
  • JAVA泛型浅析
  • 5G双域快网
  • [PHP内核探索]PHP中的哈希表
  • SegmentFault for Android 3.0 发布
  • 【刷算法】求1+2+3+...+n
  • Angular2开发踩坑系列-生产环境编译
  • css选择器
  • FineReport中如何实现自动滚屏效果
  • js写一个简单的选项卡
  • Vue组件定义
  • 动态魔术使用DBMS_SQL
  • 构建二叉树进行数值数组的去重及优化
  • 关于List、List?、ListObject的区别
  • 机器学习学习笔记一
  • 开源地图数据可视化库——mapnik
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 如何使用 JavaScript 解析 URL
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 我的zsh配置, 2019最新方案
  • 我与Jetbrains的这些年
  • 物联网链路协议
  • 一、python与pycharm的安装
  • 一文看透浏览器架构
  • 源码安装memcached和php memcache扩展
  • No resource identifier found for attribute,RxJava之zip操作符
  • #NOIP 2014#Day.2 T3 解方程
  • #QT(智能家居界面-界面切换)
  • #每天一道面试题# 什么是MySQL的回表查询
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (六)vue-router+UI组件库
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (五)IO流之ByteArrayInput/OutputStream
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net framework profiles /.net framework 配置
  • .NET学习全景图
  • @property @synthesize @dynamic 及相关属性作用探究
  • @reference注解_Dubbo配置参考手册之dubbo:reference