module Geospatial
Methods for managing Redis geospatial indexes.
Definitions
def geoadd(key, longitude, latitude, member, *arguments)
Add one or more geospatial items in the geospatial index represented using a sorted set. O(log(N)) for each item added, where N is the number of elements in the sorted set. See https://redis.io/commands/geoadd for more details.
Signature
-
parameter
key
Key
Implementation
def geoadd(key, longitude, latitude, member, *arguments)
call("GEOADD", key, longitude, latitude, member, *arguments)
end
def geohash(key, member, *members)
Returns members of a geospatial index as standard geohash strings. O(log(N)) for each member requested, where N is the number of elements in the sorted set. See https://redis.io/commands/geohash for more details.
Signature
-
parameter
key
Key
-
parameter
member
String
Implementation
def geohash(key, member, *members)
call("GEOHASH", key, member, *members)
end
def geopos(key, member, *members)
Returns longitude and latitude of members of a geospatial index. O(log(N)) for each member requested, where N is the number of elements in the sorted set. See https://redis.io/commands/geopos for more details.
Signature
-
parameter
key
Key
-
parameter
member
String
Implementation
def geopos(key, member, *members)
call("GEOPOS", key, member, *members)
end
def geodist(key, from, to, unit = "m")
Returns the distance between two members of a geospatial index. O(log(N)). See https://redis.io/commands/geodist for more details.
Signature
-
parameter
key
Key
-
parameter
member1
String
-
parameter
member2
String
-
parameter
unit
Enum
Distance scale to use, one of "m" (meters), "km" (kilometers), "mi" (miles) or "ft" (feet).
Implementation
def geodist(key, from, to, unit = "m")
call("GEODIST", key, from, to, unit)
end
def georadius(key, longitude, latitude, radius, unit = "m", with_coordinates: false, with_distance: false, with_hash: false, count: nil, order: nil, store: nil, store_distance: nil)
Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a point. O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index. See https://redis.io/commands/georadius for more details.
Signature
-
parameter
key
Key
-
parameter
longitude
Double
-
parameter
latitude
Double
-
parameter
radius
Double
-
parameter
unit
Enum
-
parameter
count
Integer
Limit the number of results to at most this many.
-
parameter
order
Symbol
:ASC
Sort returned items from the nearest to the farthest, relative to the center.:DESC
Sort returned items from the farthest to the nearest, relative to the center.-
parameter
with_coordinates
Boolean
Also return the longitude,latitude coordinates of the matching items.
-
parameter
with_distance
Boolean
Also return the distance of the returned items from the specified center. The distance is returned in the same unit as the unit specified as the radius argument of the command.
-
parameter
with_hash
Boolean
Also return the raw geohash-encoded sorted set score of the item, in the form of a 52 bit unsigned integer. This is only useful for low level hacks or debugging and is otherwise of little interest for the general user.
-
parameter
store
Key
-
parameter
store_distance
Key
Implementation
def georadius(key, longitude, latitude, radius, unit = "m", with_coordinates: false, with_distance: false, with_hash: false, count: nil, order: nil, store: nil, store_distance: nil)
arguments = [key, longitude, latitude, radius, unit]
if with_coordinates
arguments.append("WITHCOORD")
end
if with_distance
arguments.append("WITHDIST")
end
if with_hash
arguments.append("WITHHASH")
end
if count
arguments.append("COUNT", count)
end
if order
arguments.append(order)
end
readonly = true
if store
arguments.append("STORE", store)
readonly = false
end
if store_distance
arguments.append("STOREDIST", store_distance)
readonly = false
end
# https://redis.io/commands/georadius#read-only-variants
if readonly
call("GEORADIUS_RO", *arguments)
else
call("GEORADIUS", *arguments)
end
end
def georadiusbymember(key, member, radius, unit = "m", with_coordinates: false, with_distance: false, with_hash: false, count: nil, order: nil, store: nil, store_distance: nil)
Query a sorted set representing a geospatial index to fetch members matching a given maximum distance from a member. O(N+log(M)) where N is the number of elements inside the bounding box of the circular area delimited by center and radius and M is the number of items inside the index. See https://redis.io/commands/georadiusbymember for more details.
Signature
-
parameter
key
Key
-
parameter
member
String
-
parameter
radius
Double
-
parameter
unit
Enum
-
parameter
count
Integer
Limit the number of results to at most this many.
-
parameter
order
Symbol
:ASC
Sort returned items from the nearest to the farthest, relative to the center.:DESC
Sort returned items from the farthest to the nearest, relative to the center.-
parameter
with_coordinates
Boolean
Also return the longitude,latitude coordinates of the matching items.
-
parameter
with_distance
Boolean
Also return the distance of the returned items from the specified center. The distance is returned in the same unit as the unit specified as the radius argument of the command.
-
parameter
with_hash
Boolean
Also return the raw geohash-encoded sorted set score of the item, in the form of a 52 bit unsigned integer. This is only useful for low level hacks or debugging and is otherwise of little interest for the general user.
-
parameter
store
Key
-
parameter
store_distance
Key
Implementation
def georadiusbymember(key, member, radius, unit = "m", with_coordinates: false, with_distance: false, with_hash: false, count: nil, order: nil, store: nil, store_distance: nil)
arguments = [key, member, radius, unit]
if with_coordinates
arguments.append("WITHCOORD")
end
if with_distance
arguments.append("WITHDIST")
end
if with_hash
arguments.append("WITHHASH")
end
if count
arguments.append("COUNT", count)
end
if order
arguments.append(order)
end
readonly = true
if store
arguments.append("STORE", store)
readonly = false
end
if store_distance
arguments.append("STOREDIST", store_distance)
readonly = false
end
# https://redis.io/commands/georadius#read-only-variants
if readonly
call("GEORADIUSBYMEMBER_RO", *arguments)
else
call("GEORADIUSBYMEMBER", *arguments)
end
end