这篇文章给大家分享的是有关Java中利用复述,实现磅服务的示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
<强>前言强>
磅(基于位置的服务)服务是现在移动互联网中比较常用的功能,例如外卖服务中常用的我附近的店铺的功能,通常是以用户当前的位置坐标为基础,查询一定距离范围类的店铺,按照距离远近进行倒序排序。
自从复述,4版本发布后,伦敦商学院相关命令正式内置在复述的发行版中。要实现上述的功能,主要用到复述,地理相关的两个命令
<强> GEOADD和GEORADIOUS 强>
命令描述
GEOADD
<强> GEOADD关键经度纬度成员(经度纬度成员……)强>
这个命令将指定的地理空间位置(纬度,经度,名称)添加到指定的关键中。
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。
当坐标位置超出上述指定范围时,该命令将会返回一个错误。
该命令可以一次添加多个地理位置点
GEORADIOUS
<强> GEORADIUS关键经度纬度半径m |公里| |英尺英里[WITHCOORD] [WITHDIST] [WITHHASH][数计数]强>
这个命令以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定最大距离的所有位置元素。
范围可以使用以下其中一个单位:
- <李>
米表示单位为米。
李> <李>公里表示单位为千米。
李> <李>mi表示单位为英里。
李> <李>《金融时报》表示单位为英尺。
李>在给定以下可选项时,命令会返回额外的信息:
- <李>
WITHDIST:在返回位置元素的同时,将位置元素与中心之间的距离也一并返回。距离的单位和用户给定的范围单位保持一致。
李> <李>WITHCOORD:将位置元素的经度和维度也一并返回。
李> <李>WITHHASH:以52位有符号整数的形式,返回位置元素经过原始geohash编码的有序集合分值。这个选项主要用于底层应用或者调试,实际中的作用并不大。
李> <李>ASC:根据中心的位置,按照从近到远的方式返回位置元素。
李> <李>DESC:根据中心的位置,按照从远到近的方式返回位置元素。
李> <李>在默认情况下,GEORADIUS命令会返回所有匹配的位置元素,虽然用户可以使用计数& lt; count>选项去获取前N个匹配元素
李><强>接口定义强>
package com.x9710.common.redis; import com.x9710.common.redis.domain.GeoCoordinate; import com.x9710.common.redis.domain.Postion; import 并不知道; public interface  LBSService {/* * *,存储一个位置 * *,@param postion 增加的位置对象 *,@throws 例外 */boolean addPostion (Postion 人事部经理);/* * *,查询以指定的坐标为中心,指定的距离为半径的范围类的所有位置点 * *,@param center 中心点位置 *,@param distinct 最远距离,单位米 *,@param asc 是否倒序排序 *,@return 有效的位置 */List<>强实现的接口强>
package com.x9710.common.redis.impl; import com.x9710.common.redis.LBSService; import com.x9710.common.redis.RedisConnection; import com.x9710.common.redis.domain.GeoCoordinate; import com.x9710.common.redis.domain.Postion; import redis.clients.jedis.GeoRadiusResponse; import redis.clients.jedis.GeoUnit; import redis.clients.jedis.Jedis; import redis.clients.jedis.params.geo.GeoRadiusParam; import java.util.ArrayList; import 并不知道; public class  LBSServiceRedisImpl implements LBSService  { private RedisConnection  redisConnection; private Integer  dbIndex; public void  setRedisConnection (RedisConnection redisConnection), { 时间=this.redisConnection redisConnection; } public void  setDbIndex (Integer dbIndex), { 时间=this.dbIndex dbIndex; } public boolean  addPostion (Postion 人事部经理),{ Jedis Jedis =, redisConnection.getJedis (); try { return (1 l ==, jedis.geoadd (postion.getType (), .getLongitude postion.getCoordinate () (), .getLatitude postion.getCoordinate () (), postion.getId ())); },{finally if (jedis !=, null), { jedis.close (); } } } public List< Postion>, radious(类型、String GeoCoordinate 中心,Long 不同,,Boolean asc), { ListJava中利用复述,实现磅服务的示例