How to use geolocation with Redis 3.2

Recently I was looking for a solution how to tell if couple of Longitudes, Latitudes actually in the same Radius.

So in the beginning I was thinking using Elasticsearch to store all my geo-locations and use their mechanism in order to search whether a point is within the requested Radius of other points.

Elastic-search is great product but I wasn’t sure if I wanted to maintain it only for our geolocation service.

Our project already using Redis.

p.s I assume you already familiar with Redis.

I found our that on the new Redis version I actually could use all geo-location features.

Redis like in Redis -> Everything goes fast!!

On their new upcoming version(not stable yet) Redis 3.2 new GEO API features is provided.

http://redis.io/commands/geoadd

Redis is orginized with Geo-Sets (backed by sorted sets).

Let’s assume we have one set that is identified by a key, and that holds some members that are associated with geo locations:

GEOADD geoset 8.663877549.5282537 "location1" 8.379628148.9978127 "location2 "8.665351,49.553302 "location3"

Now let’s suppose that I want to check which of my entries is close to a specific geo-point 

Let’s assume my input geo-point is:

8.6582361, 49.5285495

And I want to have all my stored locations with-in 10 km Radius:

We do it this way:

GEORADIUS key 8.6582361, 49.5285495 10 km

 The result will return the key-names(Location1, Location2,..) which actually close by 10 km Radius

Cool eh? how does it work? Redis encode the longtitude, latitude to a digit using technique called geo-hash. They forming a unique 52 bit integer.

So for example to determine if two lat,lon points are close we can geo-hash them first:

Tel Aviv (32.0663, 34.7664) ->

1432645594530418

Netanya (32.334, 34.8578) ->

1432650217449870

Pay attention to the prefixes.

By that we can tell how close the points. The bigger the prefix the closer they are.

Happy Redis,

Idan.

Related Articles:

(4065)

Be Sociable, Share!

Leave a Reply