PostGISトポロジ型と関数は、フェイス、エッジ、ノード等のトロポジオブジェクトを管理するために使います。
PostGIS Day Paris 2011におけるSandro Santilliさんの講演が、PostGISトポロジの概略説明として良いです。Topology with PostGIS 2.0 slide deck にあります。
Vincent Picavetさんはトポロジに関する説明とトポロジをサポートする各種FOSS4Gツールに関する、良い概略説明をState of the art of FOSS4G for topology and network analysisで出しています。
トポロジベースのGISデータベースの例としてUS Census Topologically Integrated Geographic Encoding and Reference System (TIGER)があります。PostGISトポロジの試験がしたくて、何らかのデータが必要ならTopology_Load_Tigerをご覧下さい
PostGISトポロジモジュールは前の版にもありましたが、正式なPostGIS文書の中には入れていませんでした。PostGIS 2.0.0 では、全ての非推奨関数が無くし、知られていた使いやすさの問題を解決し、機能と関数の文書をより良くし、新しい関数を追加し、SQL-MM標準により準拠させるために、大整理を行っています。
このプロジェクトの詳細情報は PostGIS Topology Wiki にあります。
このモジュールに関する全ての関数とテーブルは、topology
スキーマにインストールされます。
SQL/MM標準で定義される関数はST_プリフィクスを持ち、PostGIS特有の関数はこのプリフィクスを持ちません。
トポロジ機能を持つPostGIS 2.0をビルドするには、2章インストールにもありますが--with-topologyオプションを付けてコンパイルします。GEOS 3.3以上に依存する関数があるため、完全にトポロジーをサポートするには GEOS 3.3以上でコンパイルします。
概要
本節では、PostGISトポロジでインストールされるPostgreSQLデータ型の一覧を挙げます。独自に関数をデザインする際に特に重要となる、キャストでの振る舞いを記述していることに、ご注意ください。
- getfaceedges_returntype — 順列番号とエッジ番号の複合型です。
ST_GetFaceEdges
が返す型です。 - topogeometry — 特定のトポロジ、レイヤ内の、識別番号の付いたトポロジジオメトリへの参照である複合型で、タイプ(1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection)を持ちます。識別番号はトポロジ内のTopoGeometryについて一意に定義されます。
- validatetopology_returntype —
エラーメッセージと、エラーの場所を示す、id1とid2からなる複合型です。これは
ValidateTopology
が返す型です。
概要
本節では、PostGISトポロジでインストールされるPostgreSQLドメインのリストを挙げます。ドメインは、オブジェクト型のように扱え、関数やテーブルカラムのオブジェクトを返します。ドメインは存在するチェック制約のある型である点で、型とは違います。
- TopoElement — 2つの整数の配列で、通常TopoGeometry要素を識別するために使われます。
- topoelementarray — element_id値とelement_type値の配列です。{{id,type}, {id,type}, ...}となる整数の2次元配列です。
11.3. トポロジとTopoGeometryの管理
概要
本節では、新しいトポロジスキーマの構築、トポロジの評価、TopoGeometryカラムの管理のためのトポロジ関数の一覧を挙げます。
- AddTopoGeometryColumn — 既存のテーブルにTopoGeometryカラムを追加し、topology.layer内に新しいレイヤとして新しいカラムを登録して、新しい layer_id を返します。
- DropTopology — 使用上の注意: この関数によって、トポロジスキーマが削除され、topology.topologyテーブルからの参照とgeometry_columnsテーブルからの削除対象スキーマ内のテーブルへの参照とが削除されます。
- DropTopoGeometryColumn —
schema_name
で指定されたスキーマ内にあるtable_name
で指定されたテーブルからTopoGeometryカラムを削除し、topology.layerテーブルにある登録を解除します。 - TopologySummary — トポロジ名を取得し、トポロジ内のオブジェクトの型に関する概の全体を提供します。
- ValidateTopology — トポロジに関する問題を詳述するvalidatetopology_returntypeオブジェクトの集合を返します。
概要
本節では、新しいトポロジを生成するトポロジ関数を挙げます。
概要
本節では、エッジ、フェイス、ノードの追加、移動、削除、分割に関する関数を挙げます。本節の関数はすべてISO SQL/MMで定義されています。
- ST_AddIsoNode — フェイスに孤立ノードを追加し、新しいノードの識別番号を返します。フェイスがNULLの場合でもノードは生成されます。
- ST_AddIsoEdge —
anode
とanothernode
で指定される2つの既存孤立ノードを接続するトポロジに、ジオメトリaliestring
で定義される孤立エッジを追加し、新しいエッジの識別番号を返します。 - ST_AddEdgeNewFaces — 新しいエッジを追加します。新しいエッジがフェイスを分割する場合には、もとのフェイスを削除して、分割した2つのフェイスに置き換えます。
- ST_AddEdgeModFace — 新しいエッジを追加します。新しいエッジがフェイスを分割する場合には、もとのフェイスを編集し、1つのフェイスを追加します。
- ST_RemEdgeNewFace —
エッジを削除し、消去対象エッジでフェイスが2つに分割されているなら、分割されているフェイスを削除し、1つのフェイスに置き換えます。
- ST_RemEdgeModFace —
エッジを削除し、削除対象エッジでフェイスが2つに分割されているなら、両方の空間をとるため、ひとつを削除して、もうひとつを編集します。
- ST_ChangeEdgeGeom —
Cトポロジ構造に影響を与えることなくエッジの形状を変更します。
- ST_ModEdgeSplit — 既存のエッジに沿って新しいノードを生成してエッジを分割します。もとのエッジは変更され、エッジが1つ追加されます。
- ST_ModEdgeHeal —
2つのエッジについて、接続しているノードを削除して修復します。1番目のエッジを編集して、2番目のエッジを削除します。削除されたノードの識別番号を返します。
- ST_NewEdgeHeal —
2つのエッジについて、接続しているノードを削除して修復します。両方のエッジを削除し、1番目のエッジと同じ方向のエッジに置き換えます。
- ST_MoveIsoNode — トポロジ内の孤立ノードを別の位置に移動させます。新しい
apoint
ジオメトリがノードとして存在しているなら、エラーが投げられます。移動に関する記述を返します。 - ST_NewEdgesSplit — 新しいノードを既存のエッジに沿って作成して、エッジを分割します。もとのエッジは削除され、2つのエッジに置き換えられます。2つの新しいエッジに接続する新しいノードの識別番号を返します。
- ST_RemoveIsoNode — 孤立ノードを削除し、実行結果が返されます。ノードが孤立していない(エッジの始端または終端である)場合、例外が投げられます。
概要
本節では、非標準の手法でのトポロジ処理の関数を挙げます。
- Polygonize — トポロジエッジで定義されるフェイスを探索し、追加します。
- AddNode — 指定したトポロジスキーマのノードテーブルにポイントノードを追加し、新しいノードの識別番号を返します。指定したポイントに既にノードがある場合は既存のノード識別番号を返します。
- AddEdge — 指定したラインストリングジオメトリを使って指定したトポロジスキーマにおいて、ラインストリングエッジをエッジテーブルに追加し、関連する始点終点のノードをノードテーブルに追加し、新しい(または既存の)エッジの識別番号を返します。
- AddFace —
フェイスプリミティブをトポロジに登録し、その識別番号を得ます。
11.8. TopoGeometryコンストラクタ
概要
本節では、新しいTopoGeometryを生成するトポロジ関数を挙げます。
- CreateTopoGeom — 新しい TopoGeometryオブジェクトを topoエレメント配列から生成します - tg_type: 1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection
- toTopoGeom — 単純なジオメトリからTopoGeometryを生成します。
- TopoElementArray_Agg — lement_idとタイプの配列(topoelements)からなる
topoelementarray
を返します。
- AsGML — TopoGeometryのGML表現を返します。