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

前回のエントリーでジオハッシュによる逆ジオコーディングにおいて,単にMATCH関数で最も類似するジオハッシュを求めるだけでは,誤差が生じる場合があることが課題として分かりました。
こちらのサイトでは,ある地点のジオハッシュとその周りの8ブロックのジオハッシュを出すことが出来るようになっていますが,そのコードを解析して応用することは出来なそうだったので,アルゴリズムを一から考えて作成してみました。

下の図で,’xn774cbp’の周りの8ブロックのジオハッシュを求めるとします。
nb1

‘xn774cbp’は8桁で偶数桁なので,末尾1桁を変える隣接ブロックの配置は,横4×縦8の並びになります。これを便宜上,「同一桁の32ブロック」と呼ぶことにします。
nb2

ちなみに奇数桁の場合は横8×縦4の並びになります。(偶数桁の並びを90°回転して裏返しにしたような並びになっています。)
nb3

末尾’p’の周りの8ブロックは下図のように, y,n,q,r,2,0,b,z となります。
nb4

グリーンの n,q,r は同一桁の32ブロック内にあるので,上位7桁までは同じで,’xn774cbp‘に対して,’xn774cbn‘,’xn774cbq‘,’xn774cbr‘ となります。
一方,’p’は同一桁32ブロックの角にあるので,ブルーの 2,0,b,z,y は,隣の32ブロックにはみ出すことになります。そのため一つ上の桁も変わることになります。一つ上の桁は’b’の周りは,下図のように 0,p,z となりますが,’b’はまた同一桁32ブロックの角にあるので,さらに一つ上の桁も変える必要があります。
nb5

以上より,残りのブルーの部分は ‘xn774f02‘,’xn774f00‘,’xn774dpb‘,’xn7749zz‘,’xn7749zy‘ となります。
このコードは次のエントリーで…

関連記事