jedsi操作Redius中的GEO功能

jedsi操作Redius中的GEO功能

  • 之前楼主也是为了找这方面的资料,找了好久都一无所获,我记得百度置顶的一个回答是说目前jedsi不支持GEO功能,只能用脚步实现。
  • 我呢,并没有死心,后来在开源中国,看到一个大神指点,在github上找到了一个jedis的源码并附上了操作案例的代码。 楼主经过修改,加上简短都注释。就迫不及待发布了,为各位小伙伴在找这方面资料提供帮助,不要像我一样浪费大量时间类。
  • 也希望各位能够互相分享自己的工具包,或者某些代码案例,为中国开发项目变得更加容易和简单

代码块

代码块语法遵循标准markdown代码,例如:


import java.util.HashMap;
import java.util.List;
import java.util.Map;
import redis.clients.jedis.GeoCoordinate;
import redis.clients.jedis.GeoRadiusResponse;
import redis.clients.jedis.GeoUnit;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.geo.GeoRadiusParam;

/**
 * 
 * @author 
 *
 */
public class JedsiR {
    static String host = "localhost";
    static int port = 6379;
    static Jedis jedis = new Jedis(host, port);

    /**
     * 添加到redius
     * @param key redius的键
     * @param longitude 经度
     * @param latitude 纬度
     * @param member 用户标识
     * <br><b>@author: jun-qi.hu</b>
     * <br>createDate:2017年2月28日上午10:48:51
     */
    public void geoadd(String key, double longitude, double latitude, String member) {

        //单数据插入
        jedis.geoadd(key, longitude, latitude, member);


        Map<String, GeoCoordinate> coordinateMap = new HashMap<String, GeoCoordinate>();

        /**
         * @param key  a= redius的键
         * @param value  3=经度,4=纬度
         */
        coordinateMap.put("a", new GeoCoordinate(3, 4));
        coordinateMap.put("b", new GeoCoordinate(2, 3));
        coordinateMap.put("c", new GeoCoordinate(3.314, 2.3241));
        // 批量插入 键/值对
        jedis.geoadd("foo", coordinateMap);

    }

    // 2.查询两地距离 距离单位
    public void geodist(String key, String member1, String member2, GeoUnit unit) {

        //不输入则使用默认单位
        Double dist = jedis.geodist(key, member1, member2);

        dist = jedis.geodist(key, member1, member2, unit);
    }


    // 查询指定位置坐标都HASH编码
    public List<String> geohash(String key,String... array) {

        List<String> hashes = jedis.geohash(key, array);
        return hashes;

    }

    // GEOPOS 查询多个成员位置的坐标
    public void geopos(String key, String... members) {

        List<GeoCoordinate> coordinates = jedis.geopos("foo", members);

    }

    // GEORADIUS 查询某经纬度定位的附近其它成员
    public void georadius(String key, double longitude, double latitude, double radius, GeoUnit unit) {

        List<GeoRadiusResponse> members = jedis.georadius(key, longitude, latitude, radius, unit);

        // sort 查询附近并根据距离排序
        members = jedis.georadius("Sicily", 15, 37, 200, GeoUnit.KM, GeoRadiusParam.geoRadiusParam().sortAscending());

        // sort
        members = jedis.georadius("Sicily", 15, 37, 200, GeoUnit.KM,
                GeoRadiusParam.geoRadiusParam().sortAscending().count(1));

        //           withdist, withcoord 这是个什么鬼!  我也没去查。。。 有谁知道类 麻烦告诉我啊
        members = jedis.georadius("Sicily", 15, 37, 200, GeoUnit.KM,
                GeoRadiusParam.geoRadiusParam().sortAscending().count(1).withCoord().withDist());
        GeoRadiusResponse response = members.get(0);

    }

    // GEORADIUS 查询该成员定位的附近其它成员
    public void georadiusByMember(String key, String member, double radius, GeoUnit unit) {


        List<GeoRadiusResponse> members = jedis.georadiusByMember(key, member, radius, unit);

        // 将结果升序排列
        members = jedis.georadiusByMember("Sicily", "Agrigento", 100, GeoUnit.KM,
                GeoRadiusParam.geoRadiusParam().sortAscending());

        members = jedis.georadiusByMember("Sicily", "Agrigento", 100, GeoUnit.KM,
                GeoRadiusParam.geoRadiusParam().sortAscending().count(1).withCoord().withDist());

    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值