第11章 トポロジ

目次

11.1. トポロジ型
11.2. トポロジドメイン
11.3. トポロジとTopoGeometryの管理
11.4. トポロジコンストラクタ
11.5. トポロジエディタ
11.6. トポロジアクセサ
11.7. トポロジ処理
11.8. TopoGeometryコンストラクタ
11.9. TopoGeometryアクセサ
11.10. TopoGeometry出力

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以上でコンパイルします。

11.1. トポロジ型

概要

本節では、PostGISトポロジでインストールされるPostgreSQLデータ型の一覧を挙げます。独自に関数をデザインする際に特に重要となる、キャストでの振る舞いを記述していることに、ご注意ください。

getfaceedges_returntype — 順列番号とエッジ番号の複合型です。ST_GetFaceEdges が返す型です。
topogeometry — 特定のトポロジ、レイヤ内の、識別番号の付いたトポロジジオメトリへの参照である複合型で、タイプ(1:[multi]point, 2:[multi]line, 3:[multi]poly, 4:collection)を持ちます。識別番号はトポロジ内のTopoGeometryについて一意に定義されます。
validatetopology_returntype — エラーメッセージと、エラーの場所を示す、id1とid2からなる複合型です。これはValidateTopologyが返す型です。

11.2. トポロジドメイン

概要

本節では、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テーブルからの削除対象スキーマ内のテーブルへの参照とが削除されます。
DropTopoGeometryColumnschema_nameで指定されたスキーマ内にあるtable_nameで指定されたテーブルからTopoGeometryカラムを削除し、topology.layerテーブルにある登録を解除します。
TopologySummary — トポロジ名を取得し、トポロジ内のオブジェクトの型に関する概の全体を提供します。
ValidateTopology — トポロジに関する問題を詳述するvalidatetopology_returntypeオブジェクトの集合を返します。

11.4. トポロジコンストラクタ

概要

本節では、新しいトポロジを生成するトポロジ関数を挙げます。

CreateTopology — 新しいトポロジスキーマを生成し、新しいスキーマをtopology.topologyテーブルに登録します。
CopyTopology — トポロジ構造(ノード、エッジ、フェイス、レイヤ、TopoGeometry)を複写します。
ST_InitTopoGeo — 新しいトポロジスキーマを生成し、topology.topologyテーブルに新しいスキーマを登録し、処理の概要を表示します。
ST_CreateTopoGeo — 空のトポロジにジオメトリのコレクションを追加し、成否を示すメッセージを返します。
TopoGeo_AddPoint — 許容差を使って既存のトポロジにポイントを追加し、可能ならエッジを分割します。
TopoGeo_AddLineString — 許容差を使って既存のトポロジにラインストリングを追加し、可能ならエッジ/フェイスを分割します。
TopoGeo_AddPolygon — 許容差を使って既存のトポロジにポリゴンを追加し、可能ならエッジ/フェイスを分割します。

11.5. トポロジエディタ

概要

本節では、エッジ、フェイス、ノードの追加、移動、削除、分割に関する関数を挙げます。本節の関数はすべてISO SQL/MMで定義されています。

ST_AddIsoNode — フェイスに孤立ノードを追加し、新しいノードの識別番号を返します。フェイスがNULLの場合でもノードは生成されます。
ST_AddIsoEdgeanodeanothernodeで指定される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 — 孤立ノードを削除し、実行結果が返されます。ノードが孤立していない(エッジの始端または終端である)場合、例外が投げられます。

11.6. トポロジアクセサ

GetEdgeByPoint — 与えられたポイントにインタセクトするエッジの識別番号を探索します。
GetFaceByPoint — 与えられたポイントにインタセクトするフェイスの識別番号を探索します。
GetNodeByPoint — ポイント位置にあるノードの識別番号を探索します。
GetTopologyID — トポロジ名からtopology.topologyテーブル内にあるトポロジの識別番号を返します。
GetTopologySRID — トポロジ名からtopology.topologyテーブル内にあるトポロジのSRIDを返します。
GetTopologyName — 識別番号からトポロジ(スキーマ)の名前を返します。
ST_GetFaceEdges — 順序番号を含む、afaceの境界となる、整列したエッジの集合を返します。
ST_GetFaceGeometry — 指定されたトポロジの中の、フェイス識別番号で指定されたポリゴンを返します。
GetRingEdges — 与えられたエッジで環を形成するエッジの集合を整列して返します。
GetNodeEdges — 与えられたノードへのエッジのインシデンスの集合を整列して返します。

11.7. トポロジ処理

概要

本節では、非標準の手法でのトポロジ処理の関数を挙げます。

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を返します。

11.9. TopoGeometryアクセサ

GetTopoGeomElementArray — トポロジ要素と与えられたTopoGeometryの型(プリミティブ要素)からなるtopoelementarray(topoelementsの配列)を返します。
GetTopoGeomElements — 与えられたTopoGeometryオブジェクト(プリミティブ要素)のelement_id, element_typeを含むtopoelementの集合を返します。

11.10. TopoGeometry出力

AsGML — TopoGeometryのGML表現を返します。