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.
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:
And I want to have all my stored locations with-in 10 km Radius:
We do it this way:
GEORADIUS key8.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) ->
Netanya (32.334, 34.8578) ->
Pay attention to the prefixes.
By that we can tell how close the points. The bigger the prefix the closer they are.