用redis在redis中的Geohash

时间:2012-08-14 10:02:32

标签: php redis geohashing

我正在使用带有php的Redis及其库 phpredis

我有以下结构:

city:1 {
 lat->14.02,
 lon->10.00,
 hash->sp2f1h60w5j
}

city:2 {
 lat->14.03,
 lon->10.1,
 hash->sp2f1h60w5m
}

但我还没有找到一种通过哈希搜索的方法。我想搜索完全相同的哈希或大致相同的哈希值。 我应该改变我的结构吗?

感谢。

3 个答案:

答案 0 :(得分:4)

您可以按照Josiah Carlson的建议from this thread,将哈希转换为数字,并将其用作排序集中的分数。像这样:

city:1 {
 lat->14.02,
 lon->10.00,
 hash->sp2f1h60w5j
}

city:2 {
 lat->14.03,
 lon->10.1,
 hash->sp2f1h60w5m
}

要将地理数据用作数字,您需要使用特定字符映射从基数32解码它们 - 请参阅Geohash on Wikipedia。我将使用下面的示例数字。

cities { (1, 4711), (2, 4712) }

现在,您可以使用zrangebyscore查找某个地区的城市:

zrangebyscore cities 4000 5000

答案 1 :(得分:1)

为什么不使用redis中的密钥来获取元素。

像:

city-sp2f1h60w5j = 1

city-sp2f1h60w5m = 2

那么如果你想要壁橱: 得到“钥匙”: 城市sp2f1h60w * 如果将返回键的“数组”...或城市ID。不记得确切的返回数据。

欢呼声

答案 2 :(得分:0)

您想找到特定点附近的所有物品吗?由于您正在寻找精确匹配或接近匹配,我认为情况就是如此。 Redis昨天刚刚发布了全新的Geo功能(http://redis.io/commands#geo)。

GeoRadius和GeoRadiusByMember是您正在寻找的。