geohash-spatial-code-maps について
Geohash の実装、空間検索や索引、コードベースのマップ化に関するリファレンススキルです。TypeScript と Rust の開発者向けに、一般的な地理ハッシュの手法とコードマップの設計案を優先度順にまとめています。
主な機能
- 01Geohash のエンコードとデコード規則
- 02精度・隣接セル・範囲検索
- 03空間インデックスと保存の指針
- 04コードベースの2次元空間への配置
- 05地図型ナビゲーションと描画の指針
活用シーン
- 01TypeScriptやRustのGeohash実装・レビュー
- 02境界や精度に関する不具合の調査
- 03位置データの近傍検索設計
- 04コードベースのナビゲーション可能なマップ化
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill geohash-spatial-code-mapsインストール後、Claude Code で/geohash-spatial-code-mapsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
AGENTS.mdmetadata.jsonassets/templates/_template.mdreferences/_sections.mddec-avoid-roundtrip-reencode.mddec-decode-to-bbox.mddec-precompute-reverse-alphabet.mddec-symmetric-interval-reconstruction.mdenc-base32-alphabet.mdenc-binary-chop-no-float-drift.mdenc-five-bit-char-boundary.mdenc-integer-morton-encode.mdenc-interleave-longitude-first.mdenc-normalize-input-domain.mdidx-db-prefix-index.mdidx-integer-sortable-key.mdidx-range-query-from-covering-set.mdidx-sorted-string-range-scan.mdidx-trie-hierarchical-bucketing.mdmap-coupling-implies-proximity.mdmap-deterministic-projection.mdmap-normalize-to-geohash-domain.mdmap-persist-coordinate-sidecar.mdmap-precision-as-architectural-level.mdmap-prefix-as-domain-region.mdmap-stable-coordinates.mdnav-breadcrumb-prefix-path.mdnav-cluster-by-prefix.mdnav-level-of-detail-aggregation.mdnav-precision-to-zoom-levels.md詳細
Geohash と空間コードマップのベストプラクティス
TypeScript と Rust で geohash を正しく実装する方法、大規模なクエリとインデックス作成の方法、そしてコードを平面に投影して geohash のプレフィックスを、Google マップのように移動できるドメイン領域にする「ナビゲート可能な 2D マップとしてのコードベース」パターンへの適用方法を解説します。8 つのカテゴリにわたる 42 のルールを、影響度順にまとめています。
適用する場面
以下の場合に、これらのガイドラインを参照してください。
- TypeScript または Rust で geohash のエンコーダー/デコーダー(ビットのインターリーブ、base32、精度、近傍)を実装またはレビューするとき
- 緯度/経度データに対する近接検索、半径検索、バウンディングボックス検索を構築するとき、または geohash をインデックスキー(SQL B-tree、Redis sorted sets)として保存するとき
- よくある geohash のバグ(軸の入れ替え、誤ったアルファベット、境界での偽陰性、高精度でのセルのオフバイワン)をデバッグするとき
- コードベース(または抽象グラフ)を 2D 平面に投影し、geohash を適用してプレフィックスをビジネスドメインや機能の名前として使うとき
- 地図のように geohash データセットをナビゲートするとき:精度に応じたズーム、ビューポートのタイル読み込み、詳細度の集約、プレフィックスによるクラスタリング、ディープリンク
対象範囲について
カテゴリ 1〜4、6、7 は、権威ある情報源(geohash の仕様、davetroy/geohash-js の近傍テーブル、Redis、Elasticsearch)に基づく、標準的な geohash の内容です。カテゴリ 5(map-)と 8(nav-)は、新しい知見をまとめたものです。「コードベースに geohash を適用する」ための標準ライブラリは存在しないため、これらのルールは、確立された手法(決定論的なグラフレイアウト、Morton/Z-order キー、スリッピーマップのタイル分割、ソフトウェアの地図化)から設計原則を導き出しています。このパターンが過剰な場合についても、率直に説明しています。
優先度別のルールカテゴリ
| 優先度 | カテゴリ | 影響度 | プレフィックス | ルール数 |
|---|---|---|---|---|
| 1 | エンコーディングとビットのインターリーブ | 重大 | enc- | 6 |
| 2 | 精度とセルの形状 | 重大 | prec- | 5 |
| 3 | 近傍と隣接関係 | 高 | nbr- | 5 |
| 4 | 近接検索と範囲検索 | 高 | qry- | 5 |
| 5 | コードベースの空間レイアウト | 高 | map- | 7 |
| 6 | デコードとバウンディングボックス | 中〜高 | dec- | 4 |
| 7 | 空間インデックス作成とストレージ | 中〜高 | idx- | 5 |
| 8 | ナビゲーションとレンダリング | 中 | nav- | 5 |
クイックリファレンス
1. エンコーディングとビットのインターリーブ(重大)
enc-interleave-longitude-first— 偶数ビットに経度、奇数ビットに緯度をインターリーブしますenc-base32-alphabet— RFC 4648 ではなく、geohash の base32 アルファベットを使いますenc-integer-morton-encode— 高速化とソート可能なキーのため、インターリーブした 64 ビット整数にエンコードしますenc-binary-chop-no-float-drift— 区間の中点を再計算し、浮動小数点の増分を累積しないようにしますenc-normalize-input-domain— 緯度をクランプし、経度を折り返し、有限でない入力を拒否しますenc-five-bit-char-boundary— 文字ごとに正確に 5 ビットを蓄積します
2. 精度とセルの形状(重大)
prec-choose-from-error-radius— 必要な誤差半径に基づいて geohash の長さを選びますprec-cells-are-not-square— 長さに応じてアスペクト比が変わる長方形としてセルを扱いますprec-error-is-half-cell— デコードした精度はセル全体ではなく、セルの半分として報告しますprec-cells-shrink-toward-poles— 経度方向の距離(メートル)に緯度の cos を掛けてスケーリングしますprec-avoid-mixed-precision— 比較や保存の前に、精度を統一します
3. 隣接関係(HIGH)
nbr-canonical-lookup-tables— 正規の境界/隣接テーブルを使って隣接セルを計算しますnbr-antimeridian-wrap— 日付変更線をまたいで東西の隣接セルを折り返しますnbr-pole-handling— 極を越える隣接セルは返しませんnbr-integer-level-neighbors— インターリーブ解除した整数上で隣接セルを計算しますnbr-eight-neighbor-set— 近接検索用に8つの隣接セル一式を構築します
4. 近接検索と範囲クエリ(HIGH)
qry-search-cell-plus-neighbors— プレフィックスだけでは検索せず、セルと8つの隣接セルをクエリしますqry-precision-from-radius— 検索半径に合わせてクエリの精度を調整しますqry-bbox-range-decomposition— バウンディングボックスを、それをカバーするジオハッシュ範囲に分解しますqry-refine-with-haversine— ジオハッシュ候補を実際の距離で絞り込みますqry-expand-precision-when-sparse— セルがまばらな場合、プレフィックス文字を1つ削除して検索範囲を広げます
5. コードベースを地図として扱う空間レイアウト(HIGH)
map-deterministic-projection— 任意のレイアウトではなく、構造的なシグナルからコードを2Dに投影しますmap-stable-coordinates— 座標の再現性と、増分変更に対する安定性を確保しますmap-normalize-to-geohash-domain— コードの平面をジオハッシュの緯度/経度領域に正規化しますmap-coupling-implies-proximity— 関連付けられたコードが同じ領域に配置されることを検証しますmap-prefix-as-domain-region— ジオハッシュのプレフィックスを名前付きのドメイン領域として扱いますmap-precision-as-architectural-level— プレフィックスの長さをアーキテクチャレベルに対応付けますmap-persist-coordinate-sidecar— ファイルとジオハッシュの対応関係をコミット済みのサイドカーファイルとして保存します
6. デコードとバウンディングボックス(MEDIUM-HIGH)
dec-decode-to-bbox— バウンディングボックスにデコードしてから中心を求めますdec-symmetric-interval-reconstruction— エンコーダーの区間分割を反映してデコードしますdec-avoid-roundtrip-reencode— 元のハッシュを保持し、デコード後に再エンコードしないようにしますdec-precompute-reverse-alphabet— 事前計算した逆引きアルファベットテーブルを使ってデコードします
7. 空間インデックスとストレージ(MEDIUM-HIGH)
idx-sorted-string-range-scan— プレフィックス範囲スキャン用に、ジオハッシュをソート済み文字列として保存しますidx-integer-sortable-key— コンパクトでソート可能なキーとしてインターリーブ済み整数を使用しますidx-db-prefix-index— Postgres と Redis でプレフィックスクエリを検索可能にしますidx-range-query-from-covering-set— カバー範囲の集合に対する範囲スキャンとして、ボックスクエリを実行しますidx-trie-hierarchical-bucketing— ジオハッシュトライを使って領域ごとに集約します
8. ナビゲーションとレンダリング(中)
nav-precision-to-zoom-levels— ジオハッシュの精度をズームレベルに対応付けますnav-level-of-detail-aggregation— ズームアウトしたときに、集約したプレフィックスバケットをレンダリングしますnav-tile-lazy-loading— ビューポート内のジオハッシュセルのみを読み込みますnav-cluster-by-prefix— 共通のプレフィックスを持つ重なり合ったマーカーをクラスタリングしますnav-breadcrumb-prefix-path— ジオハッシュのプレフィックスをナビゲーション状態およびディープリンクとして使用します
使い方
詳しい説明、コード例、「適用すべきでない場合」のガイダンスについては、各リファレンスファイルをお読みください。
- セクションの定義 — カテゴリー構成と影響レベル
- ルールのテンプレート — 新しいルールを追加するためのテンプレート
ルール間は [[other-rule-slug]] で相互リンクされています。関連するパターンが参照されている場合は、それに従ってください。コードマップをエンドツーエンドで構築する際の基本的な流れは、map-deterministic-projection → map-normalize-to-geohash-domain → エンコード(カテゴリー1)→ map-prefix-as-domain-region → ナビゲーション(カテゴリー8)です。
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |