To add geo data following code is used
jedis.geoadd("storegeodata", 51.5074, 0.1278, "London");
//while member string is mostly json
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London}");
jedis.geoadd("storegeodata", 51.5074, 0.1278, "{place: London, lat: 51.5074, lon: 0.1278}");
While geohash is duplicated as member string is different , how to retrieve unique geohash based value avoiding redundancy
public Map<String, Object> checkRedisGeo(double lat, double lon, Jedis j) {
Map<String, Object> result = new HashMap<>();
try
{
GeoRadiusParam param = GeoRadiusParam.geoRadiusParam();
param.sortAscending();
param.withDist();
param.count(1);
System.out.println("lat :"+lat+" , lon :"+lon);
List<GeoRadiusResponse> response = j.georadius("commander",
lon,lat, 150, GeoUnit.M, param);
//System.out.println(response.size()+" size");
if(response.size() > 0)
{
for (GeoRadiusResponse geoRadiusResponse : response) {
System.out.println("lat :"+lat+" , lon :"+lon+", stringmember :"+geoRadiusResponse.getMemberByString());
//System.out.println(geoRadiusResponse.getDistance());
Object[] data= {geoRadiusResponse.getMemberByString()};
System.out.println(data);
result.put("result", data);
}
}else {
// sendEvents(streamEvent, null, streamEventChunk);
System.out.println("E");
}
} catch (Exception e) {
LOGGER.error("checkRedisGeo err : "+e);
}
return result;
}
Which retrieves result but how to filter out based on geohash / score value ,how to get all distinct score ?
Was able to get duplicates and unique scores by comparing the score as the score is unique and multiple members are stored for same score following was the code for the same
Double previous_score = 0.0;
int DuplincatesCount = 0;
int UniqueCount = 0;
Set<String> values = jedis.zrange("rediskey", 0, -1);// get all the members
for (String member : values) {
Double current_score = jedis.zscore("rediskey", member);//each member looped
if (Double.compare(current_score, previous_score) == 0) { //comparing current score with previous
// score
DuplincatesCount++;
} else {
UniqueCount++;
}
previous_score = current_score;// score mapping
}
System.out.println("Duplincates entry " + DuplincatesCount);
System.out.println("Unique entry " + UniqueCount);