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 など) にデプロイしても問題ありません。