3

私の要件は次のとおりです。

lat-lon バウンディング ボックスを指定して、次のようなジオハッシュのセットを返します。

  • セット内のジオハッシュの数は、
    可能であれば少なくする必要があります (1 ~ 5 個のジオハッシュ四角形)。
  • カバレッジは、入力緯度経度バウンディング ボックスにできるだけ近づける必要があります。公差約 +/- 10%。アンダーカバーやオーバーカバーを少し入れても構いません。
  • 効率的で、モバイルデバイスで実行できる必要があります

アルゴリズムや概念的なアプローチに最も興味があります。オープン ソースの実装が存在しない場合は、Android および iOS 用の Java/Obj-C で実装する予定です。

4

1 に答える 1

5

github https://github.com/davidmoten/geoのこの Java プロジェクトには、必要なことを行うための文書化されたアルゴリズムがあります。特に、geohash 領域の境界 (つまり、極と -180/180 経線) でうまく機能します。

ジオハッシュの数を小さく (1 から 5) 維持し、許容範囲を約 10% に保つと、うまくいきません。ジオハッシュが 5 つしかない場合、多くの長方形は、ターゲット長方形の面積の 600% でジオハッシュに覆われます。実際、以下の例では、領域の 10% 以内に収まるには 667 ハッシュが必要です!

geo プロジェクト サイトの readme から抜粋した表を次に示します。

簡単な例として、角にニューヨークのスケネクタディと米国のハートフォード CT がある画面のようなプロポーションのバウンディング ボックスの場合:

さまざまなハッシュ長のハッシュ カウントは次のとおりです。

m は、ハッシュ領域全体の平方度単位のサイズで、a はバウンディング ボックスの領域です。

長さ numHashes m/a    
1 1 1694   
2 1 53     
3 4 6.6    
4 30 1.6    
5 667 1.08   
6 20227 1.02   

使用されるアルゴリズムは効率的で、関連するコードは他のアーティファクトに依存していないため、Java をサポートするモバイル デバイス (Android など) にデプロイしても問題ありません。

于 2013-09-19T21:15:01.133 に答える