Redis 中的 Geohash 与 php
Posted
技术标签:
【中文标题】Redis 中的 Geohash 与 php【英文标题】:Geohash in redis with php 【发布时间】:2012-08-14 10:02:32 【问题描述】:我正在将 Redis 与 php 及其库 phpredis 一起使用。
我有以下结构:
city:1
lat->14.02,
lon->10.00,
hash->sp2f1h60w5j
city:2
lat->14.03,
lon->10.1,
hash->sp2f1h60w5m
但我还没有找到一种通过哈希进行搜索的方法。我想搜索例如完全相同的哈希或大致相同的哈希。 我应该改变我的结构吗?
谢谢。
【问题讨论】:
【参考方案1】:您可以按照 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 用作数字,您需要使用特定的字符映射从 base 32 解码它们——请参阅Geohash on Wikipedia。我将在下面使用示例数字。
cities (1, 4711), (2, 4712)
现在您可以使用zrangebyscore 查找某个区域内的城市:
zrangebyscore cities 4000 5000
【讨论】:
你也可以看看github.com/doat/geodis包是怎么做的。【参考方案2】:为什么不使用redis中的key来获取元素。
喜欢:
城市-sp2f1h60w5j = 1
城市-sp2f1h60w5m = 2
如果你想要壁橱: 通过“钥匙”获得: 城市-sp2f1h60w* 如果将返回键的“数组”......或城市ID。不记得确切的返回数据。
干杯
【讨论】:
【参考方案3】:您想查找特定点附近的所有项目吗?由于您正在寻找完全匹配或近似匹配,我认为是这样。 Redis 昨天刚刚发布了全新的地理功能 (http://redis.io/commands#geo)。
GeoRadius 和 GeoRadiusByMember 是您正在寻找的。p>
【讨论】:
以上是关于Redis 中的 Geohash 与 php的主要内容,如果未能解决你的问题,请参考以下文章
检查一个 geohash 是不是与另一个 geohash 相交