ジオハッシュ隣接セル検索
ジオハッシュを1つ入力すると、北から北西まで周囲の8つのセルが分かります。u4pruydの北はu4pruyf、東はu4pruyeで、どれも同じ文字数です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- ジオハッシュ文字列
- u4pruyd
- 精度
- 7
- N
- u4pruyf
- NE
- u4pruyg
- E
- u4pruye
ジオハッシュ隣接セル検索は、1つのセル識別子から、そのセルと辺または角を共有する8つのセルを求めるツールです。base32のジオハッシュ(1〜12文字の任意の精度)を貼り付けると、偶数・奇数の古典的な隣接テーブルをたどり、北・北東・東・南東・南・南西・西・北西を同じ長さで出力します。空間インデックスや近接キャッシュ、地図タイルでは、各セルをいちいち緯度経度にデコードせずに、このMoore近傍が必要になることがよくあります。
グリッド上でジオハッシュの隣接が意味すること
ジオハッシュは、経度と緯度のビットを交互に並べて5ビットの文字にまとめることで、緯度経度の矩形を短いbase32文字列としてエンコードします。同じ精度の隣接セルとは、中央のセルと辺または角で接する8つのMoore近傍の矩形です。ビットは偶奇で交互するため、ある末尾の文字のすぐ北にある文字は、文字列長が偶数か奇数かで同じテーブルにはなりません。
そのため本番品質の隣接ウォーカーは、方向ごとに2つの参照文字列と、末尾の文字が親レベルへのステップを強制するかを示す境界テーブルを保持します。東西の隣接セルは反子午線をまたいで折り返すため、地球の右端にあるセルは左端に妥当な東側の隣を持ちます。北と南は極を越えて折り返しません。
セルがすでに全球グリッドの北端または南端にある場合、その方向へのさらなるステップは範囲外であり、このツールは拒否します。精度は最初から最後まで保持されます。7文字を渡せば7文字の隣が返るので、再エンコードなしで結果を同じインデックスバケットのファミリーにそのまま結合できます。
この契約こそ、セルを8つのリングに展開する際に地図バックエンド、配送半径の拡張、ジオハッシュライブラリのユニットテストが実際に必要とするものです。
実践のヒント、制限、関連する検索
精度は公開されている1〜12文字の範囲内に保ってください。それより長いハッシュは拒否され、中間の親走査が有界に保たれ、一般的なライブラリのデフォルトとの相互運用性が維持されます。直上の8つより大きなkリングを作る場合は、各フロンティアセルでこのツールを呼び出して重複を除去してください。
この機能自体は単純でキャッシュ可能な動作を保つため、最初のリングだけを返します。極端は都市レベルの精度ではまれですが、極付近の1文字ハッシュや一部の2文字ハッシュで現れます。緯度経度エンコーダーでも、境界ボックスへのデコーダーでも、キロメートル単位の半径検索でもありません。
すでにジオハッシュ文字列を持っていて同精度の8つの隣だけが必要な場合にこの機能を選んでください。元データが座標ペアなら、まず専用エンコーダーでエンコードしてから展開します。往復チェックは簡単です。
dqcjqのようなよく知られた例を選び、8つの隣が信頼できるライブラリと一致することを確認し、文字aのような無効文字が必ず文書化されたエラーコードで失敗することを検証してください。
活用例
近接クエリのためのセル展開
ジオハッシュでポイントを索引するバックエンドサービスは、セル境界のすぐ向こうに落ちるポイントを拾うため、中央セルとその8つの隣接セルを問い合わせます。
地図タイルとヒートマップのリング
可視化パイプラインは選択したジオハッシュをMoore近傍に展開し、各セルを事前に緯度経度へデコードせずに隣接タイルを強調表示します。
よくある質問
このジオハッシュ隣接ツールは何を返しますか?
同精度の8つの隣接セル(北・北東・東・南東・南・南西・西・北西)に加え、neighborsオブジェクト、順序付きリスト、精度を返します。
ジオハッシュで有効な文字はどれですか?
base32の数字0–9と文字bcdfghjkmnpqrstuvwxyzです。
緯度経度のエンコードやデコードはしますか?
いいえ。 既存のジオハッシュ文字列を同精度の8つの隣接セルに展開するだけです。
ジオハッシュ隣接セル検索は無料ですか?
ブラウザツールは無料でローカルに実行されます。失敗タスクに課金はありません。
セル1つだけでなく隣接セルも調べるのはなぜですか?
すぐ近くにある2つの地点でも、セルの境界をはさむと別のジオハッシュになります。中心のセルと周囲の8つのセルをまとめて検索すれば、そうした地点も拾えるので、近くの結果を見落としません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/geo/geohash-neighbors \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"geohash":"u4pruyd"}'const res = await fetch("https://api.kit.forhosting.com/geo/geohash-neighbors", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"geohash": "u4pruyd"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/geohash-neighbors",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"geohash": "u4pruyd"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/geohash-neighbors", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"geohash":"u4pruyd"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"geohash":"u4pruyd"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/geohash-neighbors", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"geohash": "u4pruyd"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.geohash_neighbors",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_precision | 12 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
アルファベット外の文字、空文字列、長すぎる精度、極端での北または南へのステップは、暗黙の誤ったセルではなく、明確なinvalid_inputエラーを返します。処理は純粋で決定的な文字列演算のみ(ネットワークなし、乱数シードなし、時計への依存なし)なので、無料のブラウザ実行とプリペイドAPIは、同じジオハッシュで呼ぶたびに常に同じJSONを返します。
APIの呼び出し方と返ってくる内容
値はジオハッシュのbase32アルファベット(数字0〜9と文字b c d e f g h j k m n p q r s t u v w x y z)から1〜12文字でなければなりません。文字a、i、l、oは意図的に除外されており、検証に失敗します。前後の空白は除去され、文字は処理前に小文字化されるため、大小混在のクライアント入力が同じセルに2つのハッシュを作ることはありません。必須の文字列フィールドgeohash(エイリアスhashとgh)を1つ含むJSONボディを送信します。成功時、レスポンスは正規化されたジオハッシュとその精度をエコーし、キーn、ne、e、se、s、sw、w、nwを持つneighborsオブジェクトを返し、フラットな利用者向けに同じ8つの文字列をトップレベルフィールドとして繰り返し、listとして同じ8値の順序付き配列を提供し、countを8に設定し、短い英語メッセージを含めます。検証失敗(フィールド欠落、文字列でない、トリム後に空、不正文字、精度が12超過、極端での北または南へのステップ)はinvalid_inputを返し、課金されることはありません。料金は成功リクエストごとに定額$0.002で、単位項目と限界単価はゼロです。
実践のヒント、制限、関連する検索
新しいクライアントでは主フィールド名geohashを優先してください。エイリアスのhashとghは短いフォーム送信や古いスニペット用に存在します。そこではinvalid_inputを硬い境界として扱い、反転したセルを作り出さないでください。このページは、ジオハッシュの隣接セル、隣り合うジオハッシュ、ジオハッシュの北南東西ファインダーを探す人を対象としています。invalid_inputを返す失敗タスクはプリペイド残高を消費しないため、わざと無効なアルファベットを試す探索スクリプトも安く済みます。
連携の活用例
ジオハッシュライブラリのユニットテスト
偶数・奇数精度の決定的な期待隣接マップに加え、無効アルファベットや極端の拒否を生成し、コーディング課題やライブラリのgoldenファイルに利用します。
技術的な質問
東と西は地球を一周しますか?
はい。経度は反子午線で折り返します。北と南は極を越えて折り返さず、極端でのステップはinvalid_inputを返します。