グリッドモデルは、GeoSOT 上に構築された、離散的でマルチスケールの位置識別システムです。これは、地球の核から表面までの地球空間内のすべてのオブジェクトにグローバルに一意なグリッドコードを割り当て、そのオブジェクトを同じ場所から収集されたあらゆるデータと関連付けることができます。
クイックスタート
このセクションでは、拡張機能のインストール、テーブルの作成、グリッドコードの生成、インデックス作成、空間クエリの実行という全体のワークフローについて説明します。
ステップ1: 拡張機能のインストール
CREATE EXTENSION Ganos_GeomGrid WITH SCHEMA public CASCADE;ステップ2: グリッドコード列を持つテーブルの作成
グリッドコードは、ソースジオメトリとともに geomgrid[] 配列として保存されます。使用する予定の精度レベルごとに1つの列を定義します。
CREATE TABLE t_grid(
id integer,
geom geometry, -- source geometry
grid1 geomgrid[], -- grid codes at precision 10
grid2 geomgrid[], -- grid codes at precision 15
grid3 geomgrid[] -- grid codes at precision 26
);ステップ3: データの挿入とグリッドコードの計算
ソースジオメトリを持つ行を挿入し、ST_AsGrid(geom, precision) を使用してグリッドコード列にデータを入力します。
-- Insert source geometries (SRID 4490)
INSERT INTO t_grid(id, geom)
VALUES (1, ST_GeomFromText('POINT(116.31522216796875 39.910277777777778)', 4490)),
(2, ST_GeomFromText('POINT(116.31522217796875 39.910277776777778)', 4490)),
(3, ST_GeomFromText('POINT(116.31522217797875 39.910277776787778)', 4490)),
(4, ST_GeomFromText('POINT(116.31522227796875 39.910277776775778)', 4490));
-- Generate grid codes at three precision levels
UPDATE t_grid
SET grid1 = ST_AsGrid(geom, 10),
grid2 = ST_AsGrid(geom, 15),
grid3 = ST_AsGrid(geom, 26);ステップ4: グリッドコード列へのインデックス作成
グリッドコードは配列 (geomgrid[]) として保存されます。配列包含クエリと重複クエリをサポートするために、各グリッドコード列に GIN (Generalized Inverted Index) インデックスを作成します。
-- Create GIN indexes on each precision-level column
CREATE INDEX idx_grid_gin1 ON t_grid USING GIN(grid1);
CREATE INDEX idx_grid_gin2 ON t_grid USING GIN(grid2);
CREATE INDEX idx_grid_gin3 ON t_grid USING GIN(grid3);ステップ5: グリッドコードによるデータクエリ
以下の例は、最も一般的な3つのクエリパターンをカバーしています。
特定のグリッドセルに含まれるオブジェクト
= 演算子を使用して、グリッドコード配列がターゲットセルと完全に一致する行を照合します。
SELECT id
FROM t_grid
WHERE grid2 = ARRAY[ST_GridFromText('G001310322230230')];指定されたグリッドセルと交差するオブジェクト
@> 演算子を使用して、グリッドコード配列がターゲットセルを含む行を検索します。
SELECT id
FROM t_grid
WHERE grid3 @> ARRAY[ST_GridFromText('G00131032223023031031033223')];グリッドセルのセット内の任意のセルと交差するオブジェクト
&& 演算子を使用して、配列内の少なくとも1つのセルと重複する行を検索します。
SELECT id
FROM t_grid
WHERE grid3 && ARRAY[ST_GridFromText('G00131032223023031031211001'),
ST_GridFromText('G00131032223023031031211111')];ジオメトリによってカバーされるグリッドセルと交差するオブジェクト
ジオメトリを ST_AsGrid に直接渡してターゲットグリッド配列をオンザフライで生成し、&& を使用して重複する行を検索します。
SELECT id
FROM t_grid
WHERE grid3 &&
ST_AsGrid(
ST_GeomFromText('LINESTRING(116.31522216796875 39.910277777777778, 116.31522217797875 39.910277776787778)', 4490),
26
);ステップ6: 拡張機能の削除
DROP EXTENSION Ganos_GeomGrid CASCADE;