如何使用 java 从单个 Redis 键获取所有地理记录 (Jedis)
How to get all Geo records from single Redis key using java (Jedis)
如何获取与键相关联的所有地理记录?我能够将数据推送到 Redis 并使用
基于 [lon,lat,buffer] 进行检索
jedis.georadius(key, lon,lat, radius, GeoUnit.KM,GeoRadiusParam.geoRadiusParam().withCoord());
有什么办法可以单独使用key获取所有记录吗?以下是我用来使用 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;
}
在推送时我正在使用
jedis.geoadd(key, lon, lat, String);
试图单独从键(apicache)获取所有记录
地理数据作为排序集存储到键中。因此,您可以使用 jedis.zrange
获取所有点,但返回的值是地理格式。
要获取所有带坐标的记录,只需给出整个地球值,如下所示 jedis.georadius
.,
lat = 0
lon = 0
radii = 22000
param = withCoord
它将return所有有坐标的记录。但是,您不能使用它来订购位置。
能够通过键获取所有值(将值存储为 json 带有经纬度映射的字符串,因此每个 return 来自 zrange return 没有几何的值能够得到经纬度也
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);
}
但正如 Praga_t 所说,这只会获得价值,这个想法是映射经纬度并存储为 json,这样我们也可以通过键获得经纬度。(谢谢@Praga_t)
如何获取与键相关联的所有地理记录?我能够将数据推送到 Redis 并使用
基于 [lon,lat,buffer] 进行检索jedis.georadius(key, lon,lat, radius, GeoUnit.KM,GeoRadiusParam.geoRadiusParam().withCoord());
有什么办法可以单独使用key获取所有记录吗?以下是我用来使用 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;
}
在推送时我正在使用
jedis.geoadd(key, lon, lat, String);
试图单独从键(apicache)获取所有记录
地理数据作为排序集存储到键中。因此,您可以使用 jedis.zrange
获取所有点,但返回的值是地理格式。
要获取所有带坐标的记录,只需给出整个地球值,如下所示 jedis.georadius
.,
lat = 0
lon = 0
radii = 22000
param = withCoord
它将return所有有坐标的记录。但是,您不能使用它来订购位置。
能够通过键获取所有值(将值存储为 json 带有经纬度映射的字符串,因此每个 return 来自 zrange return 没有几何的值能够得到经纬度也
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);
}
但正如 Praga_t 所说,这只会获得价值,这个想法是映射经纬度并存储为 json,这样我们也可以通过键获得经纬度。(谢谢@Praga_t)