Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。

GeoOperations 的 add 方法

org.springframework.data.redis.core.GeoOperations// Add RedisGeoCommands.GeoLocation into key.
Long add(K key, RedisGeoCommands.GeoLocation<M> location)

GeoOperations 的 distance 方法

org.springframework.data.redis.core.GeoOperations// Get the Distance between member1 and member2.
Distance distance(K key, M member1, M member2)
spring 整合
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.geo.Distance;
import org.springframework.data.geo.Point;
import org.springframework.data.redis.connection.RedisGeoCommands;
import org.springframework.data.redis.core.GeoOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;@Component
public class GeoUtil {@Autowiredprivate RedisTemplate redisTemplate;/*** 作为存储经纬度列表的key值*/private static final String GEO_KEY = "DISTANCE";/*** 将经纬度信息添加到redis中* @param certId 标识* @param longitude 经度* @param latitude 纬度*/public void geoAdd(String certId, double longitude, double latitude) {GeoOperations geoOperations = redisTemplate.opsForGeo();Point point = new Point(longitude, latitude);RedisGeoCommands.GeoLocation geoLocation = new RedisGeoCommands.GeoLocation(certId, point);geoOperations.add(GEO_KEY, geoLocation);}/*** 两个人之间的距离* @param certId1* @param certId2* @return*/public double distanceBetween(String certId1, String certId2) {GeoOperations geoOperations = redisTemplate.opsForGeo();Distance distance = geoOperations.distance(GEO_KEY, certId1, certId2);return distance.getValue();}/*** 查询距离某个人指定范围内的人,包括距离多少米* @param certId* @param distance* @return*/public Map<String, Double> distanceInclude(String certId, double distance) {Map<String, Double> map = new LinkedHashMap<>();GeoOperations geoOperations = redisTemplate.opsForGeo();RedisGeoCommands.GeoRadiusCommandArgs geoRadiusCommandArgs = RedisGeoCommands.GeoRadiusCommandArgs.newGeoRadiusArgs();GeoResults<RedisGeoCommands.GeoLocation<String>> geoResults = geoOperations.radius(GEO_KEY, certId, new Distance(distance), geoRadiusCommandArgs.includeDistance());if (geoResults != null) {Iterator<GeoResult<RedisGeoCommands.GeoLocation<String>>> iterator = geoResults.iterator();while (iterator.hasNext()) {GeoResult<RedisGeoCommands.GeoLocation<String>> geoResult = iterator.next();// 与目标点相距的距离信息Distance geoResultDistance = geoResult.getDistance();// 该点的信息RedisGeoCommands.GeoLocation<String> geoResultContent = geoResult.getContent();map.put(geoResultContent.getName(), geoResultDistance.getValue());}}return map;}
}

Java - 使用 Redis GEO 测算经纬度距离相关推荐

  1. Java-使用Redis GEO测算经纬度距离

    一.Redis GEO相关命令操作 GEO也是Redis中提供的一种数据类型,可以将其理解成ZSet有序集合类型 GEOADD GEOADD cars -115.17087 36.12306 my-c ...

  2. java和sql计算两点经纬度距离的两种方式

    一.java public class GeoUtil {      private static final double EARTH_RADIUS = 6371393; // 平均半径,单位:m ...

  3. redis计算经纬度距离

    使用场景: 1.用户查询附近的酒店 2.游戏查看附件一起玩的人 3.交友app查看附件的人 注意:redis需要从3.2版本开始才支持 import lombok.NonNull; import or ...

  4. PHP实现附近的人、按距离排序之Redis GEO方案

    [写在前面] 获取附近的人列表,首先要有用户的位置信息,做法是客户端调用一个接口传递用户的经纬度坐标.所在区域adcode等,把这些用户位置信息入库(当然前提是用户开启定位权限). 有了用户位置信息库 ...

  5. 使用Redis进行经纬度距离

    业务需求: 客户端传入用户的经纬度,后端计算出该经纬度与指定经纬度之间的距离; 在面向百度之后,发现Redis在3.2之后推出GEO特性可以简单就解决这个需求; 为了验证其的可用性(误差不要太多),这 ...

  6. oracle 经纬度算距离,根据经纬度诀别用java和Oracle存储过程计算两点距离

    根据经纬度分别用java和Oracle存储过程计算两点距离 create or replace procedure SP_GET_DISTANCE (cx in number,cy in number ...

  7. JAVA 计算地球上任意两点(经纬度)距离

    /*** 计算地球上任意两点(经纬度)距离* * @param long1* 第一点经度* @param lat1* 第一点纬度* @param long2* 第二点经度* @param lat2* ...

  8. java 经纬度距离计算

    导入依赖 <dependency><groupId>org.gavaghan</groupId><artifactId>geodesy</arti ...

  9. php reids的geo功能,Redis GEO相关命令和功能,你造吗?

    Redis 是一个高性能的key-value数据库,其最大优点就是,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用.同时Redis还提供 ...

最新文章

  1. .NetCore Docker
  2. c语言实现4x4随机字母,求用C++编写一个4x4矩阵运算类(元素float),实现转置和相乘,具体见补充,在线等!谢谢啦~...
  3. 中美程序员的不完全对比,看看跟你了解的一样吗?
  4. 三大缓存框架ehcache、memcache和redis的介绍
  5. javaweb学习总结(三十四)——使用JDBC处理MySQL大数据
  6. [转]一些需要禁用的PHP危险函数和禁用方法
  7. Swift5版本以上#selector报错解决
  8. 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应
  9. 【干货】Python中几个有趣的函数
  10. poj3171 Cleaning Shifts
  11. mysql 触发器和存储过程组合使用,实现定时触发操作
  12. Go语言优秀Web框架
  13. 报错解决:No module named tensorflow.contrib
  14. MySQL常用语句、连接MySQL格式:mysql-h主机地址-u用户名-p用户密 (详细篇 修改版)
  15. php获取本地上传图片地址,php获取CSS文件中图片地址并下载到本地的方法
  16. 三菱有C语言PLC控制器,三菱PLC可程序设计控制器系列软件介绍
  17. 魔兽争霸如何修改快捷键
  18. 2022年全球与中国汽车MEMS加速度计市场现状及未来发展趋势
  19. nvidia平台gst-launch-1.0使用记录
  20. 65536 65535 65534

热门文章

  1. 阿里OCR身份证识别相关信息
  2. [Matlab科学绘图] Matlab三维绘图总结
  3. MSYS2 Windows软件分发和构建平台
  4. SQLServer--------附加数据库以及解决附加时出现的错误
  5. ispm13:项目管理各个过程的工具和技术(重点知识)
  6. #define的用途
  7. Orange Pi i96 入手填坑问题(2)-wifi网卡MAC地址随机变化和串口粘贴死机问题
  8. 最真的梦 歌词 |周华健最真的梦歌词|完整的最真的梦歌词
  9. IOS开发之——AFN-基本使用(01)
  10. React 编码工具