Redsi通过geo计算距离
一. 前言
前段时间,小熙赶项目比较忙。趁此机会记录下遇到的后端距离计算实现,app端会有实时的经纬度回传到Redis中,PC端和H5需要实时查看位置和距离,所以想下Redis是否支持此类计算。
二. Redis的geo介绍
版本支持:
redis在3.2版本中开始支持geo功能
命令介绍:
(1) geoadd 添加地址sms-center:5>geoadd cityLocationGeo 116.405285 39.904989 北京1sms-center:5>geoadd cityLocationGeo 121.472644 31.231706 上海1
(2)geodist 计算距离(默认是米,可以指定单位千米)
sms-center:5>geodist cityLocationGeo 北京 上海1067597.9668sms-center:5>geodist cityLocationGeo 北京 上海 km1067.5980
(3)geohash 获取地址的hash值(可用于判断是否存在)
sms-center:5>geohash cityLocationGeo 上海 北京wtw3sjt9vg0wx4g0b7xrt0
(4)geopos 获取地理位置(经纬度)
sms-center:5>geopos cityLocationGeo 北京1) "116.40528291463851929"2) "39.9049884229125027"
(5)zrem 删除某个地址(redis中没有geodel命令)
sms-center:5>zrem cityLocationGeo 北京1
其他更多详细命令请查询文档
三. redisTemplate 使用 geo
这里的storeKey和memberKey是两个地理位置的keyName,可任意替换。
添加geo
/*** 向redis中添加geo计算数据** @param prefixName* @param caseDetail* @param latitude* @param longitude* @param name* @return*/private String addGeoData(String prefixName, CaseDetail caseDetail, String latitude, String longitude, String name) {String geoKey = prefixName + "_" + caseDetail.getStoreNo() + "_" + caseDetail.getCaseNo() + "_LatitudeAndLongitude";Point point = new Point(Double.valueOf(longitude), Double.valueOf(latitude));redisTemplate.opsForGeo().add(geoKey, point, name);redisTemplate.expire(geoKey, 30, TimeUnit.SECONDS);return geoKey;}
计算距离
// 计算距离Distance distance = redisTemplate.boundGeoOps(geoKey).distance(storeKey, memberKey, RedisGeoCommands.DistanceUnit.KILOMETERS);double value = distance.getValue();
获取hash地址
List hash = redisTemplate.boundGeoOps(geoKey).hash(storeKey);
获取地理位置(经纬度)
List<Point> position = (List<Point>) redisTemplate.boundGeoOps(geoKey).position(memberKey).stream().filter(Objects::nonNull).collect(Collectors.toList());
删除某个地理位置
Long remove = redisTemplate.boundGeoOps(geoKey).remove(storeKey);
四. 后语
基本开发以上的可以了,如果想了解更多,可以查看文档。
Redsi通过geo计算距离相关推荐
- Redis geo计算距离
首先redis版本必须在3.2版本,在地球上适用 有效的纬度从-85.05112878度到85.05112878度. 有效的经度从-180度到180度.首先redis版本必须在3.2版本. 主要命令: ...
- 地理坐标定位和计算距离
地理坐标定位和计算距离 场景介绍 在SNS应用中通常会有"附近的人".或者地图应用中搜寻目的地距离当前路程等场 景.此时我们就需要根据两点地理位置的经度和纬度计算出距离. 备注:通 ...
- 百度高德批量爬取经纬度并计算距离
声明:代码仅作学习交流用途,代码分享者与创作者不承担任何由他人恶意运行而导致的责任,勿擅自修改限制频率的参数,勿恶意攻击网页,请学习浏览者遵守社会公德与法律秩序,爬虫导致的网页崩溃等损失由计算机操作者 ...
- R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离)
R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离) 目录 R语言distRhumb函数计算距离实战(两个地理点之间的Rhumb距离) #导入geosphere包
- K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解?
K近邻(KNN)算法是基于实例的算法,如果训练样本数量庞大,预测的时候挨个计算距离效率会很低下,如何破解? K近邻(KNN)是最简单的算法之一,它计算预测样本与训练数据集中每个数据点之间的距离,并找到 ...
- 计算距离torch.nn.PairwiseDistance
通常,我们计算欧式距离,例如[0,0]到[1,1]的距离为2\sqrt22. pdist = nn.PairwiseDistance(p=2)#p=2就是计算欧氏距离,p=1就是曼哈顿距离,例如上面 ...
- 根据两点间的经纬度计算距离
/** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($l ...
- ITK:从二进制图像中的对象计算距离图
ITK:从二进制图像中的对象计算距离图 内容提要 C++实现代码 内容提要 从二进制图像中的对象计算距离图 C++实现代码 #include "itkImage.h" #inclu ...
- php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
#1.两点距离(1.4142135623730951) select st_distance(point(0,0),point(1,1)); select st_distance(point (120 ...
最新文章
- 安全 - MySQL 出现严重的密码安全漏洞,许多系统存在风险
- Jmeter实现压力测试(多并发测试)
- 联想 android 5.1 root权限,联想A520手机ROOT权限图文教程(附联想A520root工具)
- leetcode 73 矩阵置零 C++ 两种解法
- Java中的装箱和拆箱剖析
- jdk下载--操作系统
- 10分钟学习简略五子棋 源码+注释教学
- HTML PS 环境搭建,快捷键及简单图片处理(图片测量及抠取)
- Unable to load class 'org.gradle.api.internal.component.Usage
- 元素的 “包含块” 如何确定?Containing Block
- JAVA制作简单的查询身份证号信息小程序
- Busybox下tftp命令使用详解
- 主题: 逆向英语学习方法
- AMD提出的补丁使退出延迟降低21%左右
- docker commit镜像以及数据卷技术
- 安卓APP——网页访问(WebView)
- openwrt 显示系统运行时间和空闲时间
- 物联网设备的网络连接---上篇
- spark-sql 指定metastore地址、读取mysql
- vue3 composition(组合式)API 是什么?我为什么要使用它?
热门文章
- ISO21434车辆网络安全解读-2.组织网络安全管理
- 一分钟解决上网速度慢的问题
- 零售行业数据分析之员工绩效考核·技巧整理
- CSDN回帖得分大全(近两年)
- 联通SGIP1.2短信接口 Java版实现 总结 2013-10-23测试通过
- 预装linux的笔记本好处,联想将更认真对待预装Linux笔记本
- 《Apollo 智能驾驶进阶课程》三、无人车自定位技术
- 专访 | Aeternity创始人谈公链之争:你觉得PHP是Java竞争
- Windows Visual Studio 2019 编译 bochs
- 你对P300事件相关电位知道多少?