Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java(Jedis)从单个Redis密钥获取所有地理记录_Java_Redis_Geometry_Gis_Jedis - Fatal编程技术网

如何使用java(Jedis)从单个Redis密钥获取所有地理记录

如何使用java(Jedis)从单个Redis密钥获取所有地理记录,java,redis,geometry,gis,jedis,Java,Redis,Geometry,Gis,Jedis,如何获取与密钥关联的所有地理记录?我能够将数据推送到Redis中,并使用[lon、lat、buffer]进行检索 jedis.georadius(key, lon,lat, radius, GeoUnit.KM,GeoRadiusParam.geoRadiusParam().withCoord()); 有没有办法单独使用密钥获取所有记录?下面是我使用geobuffer从redis中提取记录的代码 public Map<String, Object> getFromRedis(St

如何获取与密钥关联的所有地理记录?我能够将数据推送到Redis中,并使用[lon、lat、buffer]进行检索

jedis.georadius(key, lon,lat, radius, GeoUnit.KM,GeoRadiusParam.geoRadiusParam().withCoord()); 
有没有办法单独使用密钥获取所有记录?下面是我使用geobuffer从redis中提取记录的代码

public Map<String, Object> getFromRedis(String key, Double lat, Double lon, Integer radii, Integer resultCount,  boolean hasType, String typekey) {
    Map<String, Object> result = new HashMap<>();
    ArrayList<Map<String,Object>> geoObj= new ArrayList<>();

    boolean gotresult = false;
    try(Jedis jedis=new Jedis("localhost",6379);)
    {
        
        GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
        param.sortAscending();
        param.withDist();
        param.count(resultCount);
        List<GeoRadiusResponse> response;
        response =  jedis.georadius(key,lat,lon, radii, GeoUnit.M, param);//redis zset key, lon,lat,radii,..
          if(response.size() > 0)
          {
              for (GeoRadiusResponse geoRadiusResponse : response) {
                    Map<String, Object> resultObj = new HashMap<>();
                    Object[] data= {geoRadiusResponse.getMemberByString()};
                    LOGGER.info("Got Result from Redis Server :: "+data);
                    gotresult = true;
                        for(Object o : data)
                        {
                            JSONObject jObject = new JSONObject(o.toString());
                            Iterator<?> keys = jObject.keys();
                            while( keys.hasNext() ){
                                String keyObj = (String)keys.next();
                                String value = jObject.getString(keyObj); 
                                resultObj.put(keyObj, value);
                            }
                            LOGGER.info("Fetched Value : "+resultObj);
                            geoObj.add(resultObj);
                        }
                   }
                result.put("result", geoObj);
          }
          else {
                LOGGER.info("Unable to find matching result in Redis server");
          }
    } catch (Exception e) {
        LOGGER.error("Redis Fetch result failed");
        LOGGER.error("Error : "+e);
    }
    result.put("status", gotresult);
    return result;
}

试图将所有记录单独从密钥(apicache)重设为重设,地理数据将作为已排序集存储到密钥中。因此,你可以使用
jedis.zrange
获取所有点,但重新计算的值是geo格式的

要获得所有坐标记录,只需在
绝地武士格奥尔迪乌斯
中给出整个地球的值即可

lat = 0
lon = 0  
radii = 22000  
param = withCoord

它将返回所有带有坐标的记录。但是,您不能使用此命令对位置进行排序。

地理数据作为已排序集存储在密钥中。因此,你可以使用
jedis.zrange
获取所有点,但重新计算的值是geo格式的

要获得所有坐标记录,只需在
绝地武士格奥尔迪乌斯
中给出整个地球的值即可

lat = 0
lon = 0  
radii = 22000  
param = withCoord

它将返回所有带有坐标的记录。但是,您不能使用此命令对位置进行排序。

能够按键获取所有值(存储值为json字符串,带有lat long映射,因此每次从zrange返回时,不带几何体的返回值也能够获取lat lon)

try(Jedis jedis=new Jedis("localhost",6379);) {
Set<String> values =  jedis.zrange(Key, 0, -1);//key, start , end        
 for (String  recordvalue : values) {
                System.out.println(recordvalue);//HashMap<String, Object> map = new Gson().fromJson(recordvalue .toString(), HashMap.class);
            }
 }
} catch (Exception e) {
        LOGGER.error(e);
}
try(绝地武士=新绝地武士(“localhost”,6379);){
设置值=jedis.zrange(键,0,-1);//键,开始,结束
for(字符串记录值:值){
System.out.println(recordvalue);//HashMap map=new Gson().fromJson(recordvalue.toString(),HashMap.class);
}
}
}捕获(例外e){
错误(e);
}

但是正如Praga________________________________________________________(将值存储为json字符串,并映射lat long,因此每次从zrange返回时,不带几何体的返回值也能够获得lat lon。)

try(Jedis jedis=new Jedis("localhost",6379);) {
Set<String> values =  jedis.zrange(Key, 0, -1);//key, start , end        
 for (String  recordvalue : values) {
                System.out.println(recordvalue);//HashMap<String, Object> map = new Gson().fromJson(recordvalue .toString(), HashMap.class);
            }
 }
} catch (Exception e) {
        LOGGER.error(e);
}
try(绝地武士=新绝地武士(“localhost”,6379);){
设置值=jedis.zrange(键,0,-1);//键,开始,结束
for(字符串记录值:值){
System.out.println(recordvalue);//HashMap map=new Gson().fromJson(recordvalue.toString(),HashMap.class);
}
}
}捕获(例外e){
错误(e);
}
但正如Praga_t所说,这只会得到值,其想法是映射lat lon并存储为json,这样我们也可以通过键获得latlong