Java中利用复述,实现磅服务的示例

  介绍

这篇文章给大家分享的是有关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), {   List

Java中利用复述,实现磅服务的示例