geohash
地理情報ツールキットは、geohash のエンコードおよびデコードを行う関数を提供しています。
地理情報ツールキットは、形状 (点、線、多角形など) を 1 つ以上の geohash としてエンコードするための関数を提供します。結果として生成される geohash は、バイナリー・ストリングまたはより一般的な英数字 base-32 形式のいずれかとして保管できます。
注: 本初 (グリニッジ) 子午線 (経度がゼロ)、極地 (経度が未定義)、または赤道 (緯度がゼロ) をまたぐ形状をエンコードすると、空のストリングが戻されます。これは、このような形状を単一の geohash に含めることができないためです。
geohash のビット深度
geohash のエンコードに使用されるビット数は、ビット深度 と呼ばれます。これにより、領域の南北および東西の範囲と、生成される geohash ストリングの長さが決定されます。ビット数が大きいほど geohash が長くなり、領域が小さくなります。以下の表に、球状の地球の赤道近くの点について、geohash のエンコードに使用されるビット数、結果の base-32 ストリングの文字数、およびその点を含む領域のディメンションと領域の関係を示します。

長さの単位はメートルで、面積の単位は平方メートルです。この図表を使用して、Hangout または SpatialRouter 演算子で使用するビット数を決定します。例えば、赤道近くの領域の場合、33 のビット深度は 305m x 305m の領域になります。
このデータに赤道近くの点への参照が含まれること、および赤道から遠くなるほど領域が狭くなる (東西の範囲が小さくなる) ことから、以下のプロシージャーを使用して、他の緯度での地域に使用するビット数を決定します。
target = region_size;
latitudeInDegrees = latitude_of_point_within_area_of_interest;
adjustedExtent = target/cos(latitudeInDegrees);
double extentAtEquator = MAX(adjustedExtent, target);
このプロシージャーは、いずれかの極地 (latitudeInDegrees が 90 または -90 の場合) の点では機能しないことに注意してください。例えば、緯度が 45.8 度のフランスのターゲットに 300m x 300m の領域が必要であるとします。target の値は 300 で、latitudeInDegrees の値は 45.8 です。このプロシージャーは、45.8 度の 300m の東西の範囲が赤道近くの 424.26m の東西の範囲に対応するとして計算します。geohash のビット深度の表で、424.26m に最も近い範囲値は 611.50m であり、これは 31 のビット深度を持ちます。