2

私はただ問題に遭遇します。redis を使用して地理情報を保存します。例えば:

hset 10001 la 41.000333
hset 10001 lo 121.999999

また

zadd la 41.xxxxx pk-value
zadd lo 121.xxxxx pk-value

約 40000 個のキー値 キーは端末 ID 用であり、値が設定され、端末の GPS 情報が保存されます。周辺端末を計算する必要があります。たとえば、私の場所は 41.000123, 121.999988 で、私の場所周辺の端末を最速で計算したいのですが、2 つの場所の距離を計算する方法を考えています。私が望むのは、すべてのデータを高速に反復する方法を考えることだけです。Redis 2.6 には lua のサポートがあります。問題の解決に役立ちますか?

4

2 に答える 2

2

おそらくジオハッシュを使用したいと思うでしょう。そうすれば、必要な精度で経度/緯度を保存 (および検索) することができます。また、指定された境界ボックス内にあるポイントを取得するのも比較的簡単です。

redis での実装については、 geodis をご覧ください

于 2012-05-24T14:08:42.167 に答える
1

あなたの質問を理解しているので、ある座標に近いすべての値を見つけたいですか? 1 つは Lua スクリプトを使用する方法、もう 1 つはおおよその緯度/経度ごとに 1 つの並べ替えられたセットを格納する方法です (必要な粒度が事前にわかっている場合)。例:

zadd la.41 41.000333 pk-value
zadd lo.121 121.999999 pk-value

次に、ある座標に近いものを見つける必要がある場合 (たとえば(42.01, 122.03))、次のようにします。

lat = 42.01
lon = 122.03
lat_min, lat_mid, lat_max = round(lat - 1), round(lat), round(lat + 1)
lon_min, lon_mid, lon_max = round(lon - 1), round(lon), round(lon + 1)

したがって、ソートされたセットla.41, la.42, la.43, lo.121,lo.122を調べlo.123ます。

zinterstore close.${lat},${lon} 6 la.${lat_min}, la.${lat_mid}, la.${lat_max}, lo.${lon_min}, lo.${lon_mid}, lo.${lon_max}

ここでclose.${lat},${lon}、指定された座標に近いすべての端末の ID を含める必要があります。

la.41.0明らかに、 のように各座標をより細かく保存しlo.121.0、閉じるターミナルのみを探すことができます。必要に応じて、クライアント コードで結果をさらにフィルター処理できます。

于 2012-05-24T11:01:12.863 に答える