jedsi操作Redius中的GEO功能

来源:互联网 发布:淘客如何找商家数据 编辑:程序博客网 时间:2024/06/05 20:24

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 0
原创粉丝点击