2012-08-14 83 views
2

我使用Redis和php及其库phpredis在redis中的Geohash和php

我有以下结构:

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

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

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

谢谢。

回答

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 
} 

要使用geohashes数字,你需要将它们从底部32使用特定的字符映射解码 - 见Geohash on Wikipedia。我将使用下面的示例数字。现在

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

可以使用zrangebyscore找到城市所在地区:

zrangebyscore cities 4000 5000 
+0

你也可以看看它是如何在https://github.com/doat/geodis包中完成的。 – 2012-08-16 07:46:02

1

为什么你不使用钥匙redis的得到的元素。

,如:

城市sp2f1h60w5j = 1

城市sp2f1h60w5m = 2

那么,如果你想在壁橱: 度日 “钥匙”: 城市sp2f1h60w * 如果意志返回键“......”或城市ID的“数组”。不记得确切的回报数据。

欢呼声

0

你想查找特定点附近的所有项目吗?既然你在寻找确切的或接近的匹配,我认为是这样。 Redis昨天发布了全新的Geo功能(http://redis.io/commands#geo)。

GeoRadius和GeoRadiusByMember是你正在寻找的。