Commit 51b4a472 authored by antirez's avatar antirez
Browse files

Geo: use the high level API to decode in geoAppendIfWithinRadius()

parent 0b931390
...@@ -160,24 +160,19 @@ static inline void addReplyDoubleDistance(redisClient *c, double d) { ...@@ -160,24 +160,19 @@ static inline void addReplyDoubleDistance(redisClient *c, double d) {
* *
* returns REDIS_OK if the point is included, or REIDS_ERR if it is outside. */ * returns REDIS_OK if the point is included, or REIDS_ERR if it is outside. */
int geoAppendIfWithinRadius(geoArray *ga, double x, double y, double radius, double score, sds member) { int geoAppendIfWithinRadius(geoArray *ga, double x, double y, double radius, double score, sds member) {
GeoHashArea area = {{0,0},{0,0},{0,0}}; double distance, latlong[2];
GeoHashBits hash = { .bits = (uint64_t)score, .step = GEO_STEP_MAX };
double distance;
if (!geohashDecodeWGS84(hash, &area)) return REDIS_ERR; /* Can't decode. */
double neighbor_y = (area.latitude.min + area.latitude.max) / 2;
double neighbor_x = (area.longitude.min + area.longitude.max) / 2;
if (!geohashGetDistanceIfInRadiusWGS84(x, y, neighbor_x, neighbor_y, if (!decodeGeohash(score,latlong)) return REDIS_ERR; /* Can't decode. */
radius, &distance)) { if (!geohashGetDistanceIfInRadiusWGS84(x,y,latlong[1], latlong[0],
radius, &distance))
{
return REDIS_ERR; return REDIS_ERR;
} }
/* Append the new element. */ /* Append the new element. */
geoPoint *gp = geoArrayAppend(ga); geoPoint *gp = geoArrayAppend(ga);
gp->latitude = neighbor_y; gp->latitude = latlong[0];
gp->longitude = neighbor_x; gp->longitude = latlong[1];
gp->dist = distance; gp->dist = distance;
gp->member = member; gp->member = member;
gp->score = score; gp->score = score;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment