このトピックでは、地理グリッドモデルの詳細と使用方法について説明します。
概要
概要
地理的グリッドモデルは、統一された単純な地理的空間分割および測位基準システムである。 このモデルは、指定された経度および緯度または地上距離によって地上領域を連続的に分割し、空間的不確実性を許容可能な程度に制御して正多角形を形成する。 ポリゴンはグリッドセルと呼ばれ、階層的なマルチレベルグリッドシステムを形成するために使用されます。 これは、地上空間の離散化と統一符号化を実現するのに役立ちます。
GanosBase GeomGridは、PostgreSQL ( PolarDB for PostgreSQL (Compatible with Oracle)) の時空間エンジン拡張です。 GanosBase GeomGridは、地理グリッドを表現および処理するために使用されます。 このモデルは、地理的グリッドおよび地理的グリッドアレイデータ型のための空間演算関数および空間関係識別関数、ならびにGanosBaseにおける他のデータ型のための変換関数を提供する。
GeomGridは、GanosBaseの地理グリッドデータ型を参照します。 地理的グリッドは、地球の表面を再現する多角形グリッドセルのセットです。 これは、地理空間内の地物の位置情報を表し、他のタイプの時空間データを統合するために使用できます。 各グリッドセルは、1対1のマッピングを提供するために符号化される。 3D地理グリッドは、緯度と経度だけでなく、高さ次元も細分化してエンコードします。
GanosBase GeomGridは、GeoSOTおよびH3地理グリッドをサポートしています。 GeoSOTは、中国で開発された地球の細分化理論であり、これに基づいて、離散的なマルチスケールの位置識別システムが開発されています。 H3は、地球の表面をカバーするためにUberによって開発された2次元地理グリッドです。 H3は六角形グリッドセルを使用する。
機能
GeomGridは、地理グリッドのインポートとエクスポート、空間操作、および空間関係の識別をサポートします。
GeomGridでは、Text、Bytea、Geometry、Meshgeom、Sfmesh、Vomeshなどのデータ型をGeomGrid型に変換できます。
GeomGridは、グリッドレベルと座標の取得、親ノードと子ノードの計算、グリッドのマージ、グリッドの分割などの空間クエリ操作をサポートしています。
GeomGridは、GeomGridと、Geometry、Meshgeom、Sfmesh、Vomesh、GemoGridなどの他のデータ型との間の空間的関係の識別をサポートします。
詳細については、「GeomGrid SQLリファレンス」をご参照ください。
シナリオ
GanosBase GeomGridは、次のビジネスシナリオに適用できます。
グリッドクエリ
GanosBase GeomGridを使用して、特定のグリッドまたはグリッド配列がデータベースに保存されているグリッドと交差するかどうかを照会できます。 縮退グリッドがサポートされています。 特定のグリッドの親グリッドまたは子グリッドを照会できます。 たとえば、共有自転車を駐車すると、自分の位置がグリッドコードに変換され、これを使用して駐車場のグリッドコードが格納されているデータベースにクエリを実行して、最寄りの駐車場を識別します。 グリッドクエリを使用して、異なるレイヤーを関連付け、異なるレイヤーのオブジェクトをグリッドに格納することもできます。 次に、特定のグリッドに基づいて、関連するすべてのレイヤーのオブジェクトをクエリできます。
グリッド集約
物流や配送サービスなどの業界では、空間的および時間的要素はグリッドに基づいて計算されることがよくあります。 例えば、船舶または車両の軌道データをグリッドに集約してヒートマップを生成することができる。 軌道はグリッドに変換され、各グリッド内の軌道の数がヒートマップを生成するための熱として使用される。 また、各街路の人口データをグリッドに配布して視覚化することもできます。

グリッド経路発見
無人航空機 (UAV) の複雑な環境での経路計画に3Dグリッドを使用できます。 グリッド内の空間障害物のトラバースコストを設定し、パス発見アルゴリズムに基づいてパスを取得できます。

コンポーネント
概要
GanosBase GeomGridは、GeoSOTとH3の理論的なフレームワークに基づいて、GeomGridデータ型とH3をH3Gridデータ型として使用してGeoSOTをサポートします。
エンコード
GeoSOT
GeoSOTは、単純な投影を使用して地球を平面に変換します。 平面の大きさは、地表空間の180 ° × 360 ° から空間分割の第0層である512 ° × 512 ° に拡大される。 層の中心点は、赤道と主子午線の交点と一致します。 四分木再帰的細分化を使用することによって、第0層はレベル32に細分化される。 このようにして、地球の緯度と経度に対して整数2分割を実行できます。 地球空間全体は、全度、全分、および全秒のマルチレベルグリッドに分割されます。 グリッドのサイズは、地球全体から数センチメートルの範囲です。

GeoSOT 2Dグリッドのコードは、最大32ビットの4進数です。 1番目から9番目のビットは、グリッドの次数を記述する。 10番目から15番目のビットはグリッドの分を記述する。 16番目から21番目のビットはグリッドの2番目を表します。 22番目から32番目のビットは、2番目より低いグリッドのレベルを表します。 コード長はグリッドレベルを示します。
経度および緯度の値は、A ° B'C.D "形式に従う。 次数値は、10進数から8ビットの2進数A2に変換される。 分値は、10進数から6ビットの2進数B2に変換される。 第2の値は、10進数から6ビットの2進数C2に変換される。 第2の値の小数部は、10進数から11ビットの2進数D2に変換される。 2進数A2、B2、C2、D2は、順次連結されて31ビットの2進数を形成する。 緯度値は、経度値の前に配置され、62ビットのモートン・コードを生成する。 G0、G1、G2、またはG3は、グリッドコードを形成するためにモートンコードの前に追加される。 G0は北東半球を示す。 G1は北西半球を示す。 G2は南東半球を示す。 G3は南西半球を示す。
GeoSOT 3Dグリッドは、2Dグリッドに基づいて高さディメンションを追加します。 高さ寸法の分割が経度および緯度の分割と一致することを保証するために、各高さグリッドは1 ° の地表面グリッドに対応する。 高さ寸法は、地表面から空中までの256のグリッドと、地表面から地球のコアまでの別の256のグリッドとに分割される。 次に、垂直方向におけるレベルの数を得るために、整数2分割が実行される。 数値は、緯度および経度の値とともに使用されるバイナリ文字列に変換され、3Dグリッドコードであるモートンコードが生成されます。
H3
H3は、球に外接する20面体を投影に使用します。 次の図の二十面体には、20個の球形三角形と12個の頂点が含まれています。 それは球形の二十面体と呼ばれます。

次の図に示すように、H3は同じ配置で各三角形の表面に六角形のグリッドを作成し、グローブを122の基本セルに分割します。 H3は、各セルに高精度の六角形グリッドを作成します。

H3は、122基本セルのそれぞれを7つのセルに再帰的に分割する。 次の図は、ベースセル20の分割方法を示している。

H3コードは、63ビットまでとすることができ、長い整数によって表すことができる。 コードは通常、16進文字列としてシリアル化されます。 H3符号化のビットレイアウトは、所与のインデックスに関する情報を記憶し、その地理的位置を定義するためのコンパクトな構造を提供する。 以下の例をご参照ください。

インデックス
インデックスは、大量のデータをクエリするときにグローバルシーケンシャルスキャンによって引き起こされる待ち時間を回避するために、データを検索ツリーに編成することによってクエリを高速化するために使用されます。 GanosBase GeomGridは、次のタイプのインデックスをサポートします。
インデックス | 説明 | メリット |
Btree | Bツリーインデックスは、グリッドコードのサイズを比較することによって地理的グリッドデータ型を照会するために使用される。 | Bツリーインデックス作成は、データベースで最も一般的に使用されるインデックス作成方法であり、ほとんどの種類のクエリを高速化できます。 |
ギスト | GiSTインデックスは、地理グリッドデータ型の境界ボックスの交点と包含を照会するために使用されます。 | GiSTは、グリッド空間クエリを大幅に高速化できるRツリー構造を実装します。 |
GridGin | GridGinインデックスはGinインデックスを拡張し、地理的グリッドおよび地理的グリッドアレイデータ型の交差および包含識別を提供および最適化します。 | GridGinは、縮退したグリッドクエリをサポートし、グリッド集約コンピューティングを高速化します。 |
クイックスタート
概要
このセクションでは、拡張子の作成、テーブルの作成、データの挿入、グリッドコードの計算、インデックスの作成、クエリなど、GanosBase GeomGridエンジンの使用方法について説明します。
構文
拡張を作成します。
CREATE EXTENSION Ganos_GeomGrid CASCADE;説明アクセス許可の問題を回避するために、パブリックスキーマに拡張機能を作成します。
CREATE extension ganos_geometry WITH schema public cascade;GeoSOTグリッド操作。
グリッドコードを含むテーブルを作成します。
-- Create a table for a geometry object. CREATE TABLE t_grid(id integer, geom geometry, -- A geometry object. grid1 geomgrid[], -- A grid code with a precision of 1. grid2 geomgrid[], -- A grid code with a precision of 2. grid3 geomgrid[] -- A grid code with a precision of 3. );テーブルにデータを挿入します。
-- Insert point data. 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)); -- Insert surface data. INSERT INTO t_grid(id, geom) VALUES(5, 'SRID=4490;POLYGON((-0.08077 -0.02814, 0.0482 -0.03, 0.07426 0.03724, -0.08077 -0.02814))'::geometry); -- Insert 3D data. INSERT INTO t_grid(id, geom) VALUES(6, 'SRID=4490;CIRCULARSTRING Z (-63.597471 44.8071 20,-63.597 44.807 0,-63.5974 44.807 40)'::geometry);テーブルのグリッドコードを計算します。
-- Create grid codes of different precision levels. UPDATE t_grid SET grid1 = ST_AsGrid(geom, 10), grid2 = ST_AsGrid(geom, 15), grid3 = ST_AsGrid(geom, 26); -- Generate a degenerated grid code. UPDATE t_grid SET grid1 = st_asgrid(geom, 18, true) WHERE id = 5; -- Generate a 3D grid code. UPDATE t_grid SET grid1 = st_as3dgrid(geom, 25) WHERE id=6;グリッドコードにインデックスを作成します。
-- Create GIN indexes on grid codes of different precision levels. 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);クエリデータ
-- Query data that is included in a grid. SELECT id FROM t_grid WHERE grid2 = ARRAY[ST_GridFromText('G001310322230230')]; -- Query data that intersects with a grid. SELECT id FROM t_grid WHERE grid3 @> ARRAY[ST_GridFromText('G00131032223023031031033223')]; -- Query data that intersects with more than one grid. SELECT id FROM t_grid WHERE grid3 && ARRAY[ST_GridFromText('G00131032223023031031211001'), ST_GridFromText('G00131032223023031031211111')]; -- Query data that intersects with more than one geometry in a grid. SELECT id FROM t_grid WHERE grid3 && ST_AsGrid( ST_GeomFromText('LINESTRING(116.31522216796875 39.910277777777778, 116.31522217797875 39.910277776787778)', 4490), 26);
H3グリッド操作。
テーブルを作成します。
CREATE TABLE h3_grid( id integer, geom geometry, -- Create a table for a geometry object. h3 h3grid[] -- H3 object type. );テーブルにデータを挿入します。
INSERT INTO h3_grid VALUES (1, 'POINT(102.5 25.7)'::geometry); INSERT INTO h3_grid VALUES (2, 'POLYGON((-0.08077 -0.02814, 0.0482 -0.03, 0.07426 0.03724, -0.08077 -0.02814)'::geometry);H3グリッドコードを計算します。
-- Regular grid code. UPDATE h3_grid SET h3 = ST_AsH3Grid(geom, 7); -- Degenerated grid code. UPDATE h3_grid SET h3 = ST_AsH3Grid(geom, 7, true);インデックスを作成します。
CREATE INDEX h3_grid_btree ON h3_grid(h3);データの照会
-- Display H3 code. SELECT st_astext(h3[1]) FROM h3_grid; -- Query data. SELECT * FROM h3_grid WHERE h3 > ARRAY[ST_H3FromText('884a126689fffff')];
拡張子の削除 (オプション)
DROP EXTENSION Ganos_GeomGrid CASCADE;
SQL文
SQL文の詳細については、「GeomGrid SQLリファレンス」をご参照ください。