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. 能够在Linux系统中运行的5款大型耐玩游戏
  2. 此安装程序必须使用 java 开发工具包 (jdk) 执行_彻底搞懂Java开发工具包(JDK)安装及环境变量配置...
  3. redis安装,redis项目以来,redis和spring整合,redis的service,redis的service实现类
  4. spring 多租户_使用Spring Security的多租户应用程序的无状态会话
  5. nuxt2.0 设置 webpack 路径别名
  6. 新建Mybatis工程
  7. Python一行代码给儿子制作九九乘法表
  8. 开账户root远程桌面
  9. SmartUpload上传下载使用
  10. 图形化升级单机oracle 11.2.0.1 到 11.2.0.4
  11. Java面试应该准备的知识点系列一
  12. 100G网络你能看懂多少?
  13. 解码斯坦福开源狗DogGo--附硬件清单、源码、图纸、论文
  14. 概率扩散模型 Probabilistic Diffusion Model
  15. android xutils 教程,Android xUtils更新到3.0后的基本使用规则详解
  16. ipv6单播地址包括哪两种类型_IPV6详细讲解
  17. Java 基于JavaMail实现向QQ邮箱发送邮件(未测试)
  18. POJ - 2142 扩展欧几里得
  19. Ajax XHR响应
  20. java useragent 360 遨游 火狐_Chrome与火狐修改浏览器User Agent教程

热门文章

  1. emqtt php页面,EMQTT(Erlang MQTT消息服务器)
  2. 知识图谱学习笔记——(四)知识图谱的抽取与构建
  3. word一键生成ppt 分页_不用复制不用截图!100页文档一键转PPT,同事都找我要方法...
  4. 0基础学习VR全景平台篇 第69篇:VR直播-如何设置广告
  5. openresty lor框架路由解析
  6. 博通BroadR-Reach——车载以太网物理层技术
  7. BI 技术选型需要关注的10 个关键功能
  8. 超实用的 Linux 高级命令,程序员一定要懂!
  9. Flume NG 学习笔记(五)Sinks和Channel配置
  10. 微信无法下载文件做提示跳转到浏览器