隣接するブロックのジオハッシュを求める関数

前回のエントリーで,逆ジオコーディングの精度を高めるため,隣接8ブロックを求める考え方を示しました。
今回はそのアルゴリズムにしたがって関数を作成します。
関数名:NeighborBlock
戻り値:隣接ブロックのジオハッシュ(エラーは#N/A)
引数1:元のジオハッシュ
引数2:隣接の方向
隣接の方向は中心を0とし,下図のように定義します。左下から反時計回りに1〜8としています。
nb6

末尾のハッシュをLastHash,末尾より上位をBeforeLastHashとして分割します。
元のジオハッシュから見て,隣接の方向を考慮して末尾のハッシュ文字を置き換えますが,その組合せをひたすら分岐処理により分けています。
その組合せは,桁数が偶数の場合と奇数の場合,末尾のジオハッシュ32通り,隣接方向8方向で,2×32×8となっています。(繰り返し部は省略)
同一桁の32ブロックからはみ出して隣の32ブロックになる場合は,上位ハッシュを再帰処理することにより実現しています。

関連記事