2016-04-22 13 views
0

ジオハッシュが動的な半径/ボックスを持つ他のポイントのリストに含まれるかどうかを確認する必要があるという問題があります。私が現在行っていることは、緯度/経度が含まれているortbの入札リクエストメッセージを受け取って、ortbのデバイスの緯度/経度に一致するキャンペーンを確認するために赤字を使用することです。これは、固定半径で照会するとうまく動作します。問題は、人口密度に応じて動的な半径を持つキャンペーンを保存することです。あなたが内蔵されたコマンドを使用してZSETにgeohashesを保存する機能を持っているのRedisの3.2バージョンではジオハッシュが別のジオハッシュと交差するかどうかを確認する

現在の実装

。これはlat/lonを52ビットのgeohashに変換します。

redis zset機能を使用すると、半径を通過するキャンペーンのリストを照会することができます。これにより、現在の半径に該当するキャンペーン(0、n)が返されます。

現在の実装では、私が持っている

問題はキャンペーンが動的半径を持っているということである欠点。たとえば、1つのキャンペーンの半径は3マイル、別のキャンペーンの半径は20マイルです。私は単一の半径を渡す必要があるので、私は単純に5マイルを渡しますが、これは半径20マイルからの要求を除外します。

潜在的な改善された実装

私はこの問題を考えるが、それを一緒に置く方法を確認していないました。より良い解決策は、異なる精度の並べ替えられたセットにジオハッシュのリストを持たせて、基本的に各エントリのジオハウスボックスを作成することだと思います。問題は今、私がこれをまとめる方法や、それがうまくいくかどうかについて100%確実ではないということです。私はこれがうまくいけば誰もがこのように一緒に何かを入れている場合、本当に指導を探しています。単純なソートされたセットを使用してこれを達成し、ソートされたセットのエントリの精度をビットにマスクすることができると思います。しかし、大きなリストのキャンペーンを扱う際には、これが問題であることがわかります。異なる精度の複数の整数で動作するかどうか、またはこの表記法でO表記がどのように機能するかは正確には分かりません。私は1日に約4億件のリクエストを扱っているため、できるだけ速くする必要があります。

ノート

私はそれを記述するためにかなり複雑な問題であるので、私は問題のまともな仕事をしている願っています。私はまたかなりの図書館を見てきましたが、私は彼らが私のために問題を解決するとは思っていません。私は自分の実装を書いていますが、複雑さがすぐに頭が痛いです。

私が調査した元のライブラリ。シングルボックスクエリが可能です。

https://github.com/kungfoo/geohash-java

この1つは、より有望に見えるが、それは実際には複数のボックスを検索する機能を与えるかどうかはわかりませんでした。ここで

https://github.com/davidmoten/geo

geohasingの優れた概要です。なぜそれがIPに位置しているかわからないが、私はそれを見つけられたことがうれしい。

http://23.239.12.206:8000/posts/2014-04-05-geohash-proximity-pt2.html

答えて

1

あなたは加重ボロノイ図とポリゴンテストでポイントを試みることができます。シンプルで高速な解決策は、重み付けされたボロノイ図の各セルがカラーを有するビットマップとすることができる。次に、ポイントの色をチェックします。

関連する問題