ST_Geometry 格納タイプとは

ST_Geometry データ タイプはユーザ定義データ タイプ(UDT)の SQL 3 Specification を実装しているので、ランドマークの場所、道路、土地区画といった空間データを格納できる列を作成することができます。これは、ジオデータベースおよびデータベースに対して、ISO/OGC 準拠の SQL アクセスを提供します。このジオメトリ格納は、地理フィーチャを表すオブジェクト(ポイント、ライン、ポリゴン)の格納を提供することで、データベースの機能を拡張します。このジオメトリ格納は、データベースのリソースを効率よく使用し、レプリケーションやパーティションといったデータベースの機能との互換性を維持し、空間データへのすばやいアクセスを可能にします。

ST_Geometry 自体は、インスタンス化されない抽象スーパークラスです。ただし、そのサブクラスはインスタンス化することができます。インスタンス化されたデータ タイプはテーブルの列として定義することができ、その他の値を挿入することができます。

列を ST_Geometry タイプとして定義することはできますが、インスタンス化することができないため ST_Geometry の値は挿入しません。代わりに、サブクラスの値を挿入します。

次の図は、ST_Geometry データ タイプとそのサブクラスの階層を示しています。

ST_Geometry
ST_Geometry スーパークラスとそのサブクラス

サブクラス

ST_Geometry のサブクラスは、ベース ジオメトリ サブクラスと同種コレクション サブクラスの 2 つのカテゴリに分類されます。ベース ジオメトリには、ST_Point、ST_LineString、ST_Polygon が含まれ、同種コレクションには、ST_MultiPoint、ST_MultiLineString、ST_MultiPolygon が含まれます。名前が示しているように、同種コレクションはベース ジオメトリのコレクションです。同種コレクションでは、ベース ジオメトリのプロパティを共有することに加えて、独自のプロパティを持つこともできます。

各サブクラスは、その名前が示唆するジオメトリ タイプを格納します。たとえば、ST_MultiPoint はマルチポイントを格納します。以下の表に、サブクラスの一覧とそれらについての説明を示します。

サブタイプ

説明

ST_Point

  • 座標空間で場所を 1 つ占有する 0 次元のジオメトリ。
  • X、Y 座標値が 1 つあり、常にシンプルであり、境界は NULL です。

ST_LineString

  • 線形に補間されたパスを定義するポイント列として格納される 1 次元オブジェクト。
  • ST_LineString には長さがあります。
  • ST_LineString はその内部と交わっていなければシンプルです。
  • 閉じた ST_LineString の端点(境界)は、空間内の同じポイントを占めます。
  • ST_LineString は閉じていてシンプルである場合はリングです。
  • 端点は、ST_LineString が閉じていなければ、通常は ST_LineString の境界を形成します。ST_LineString が閉じていれば、境界は NULL です。
  • ST_LineString の内部は、閉じていなければ端点間を結ぶパスであり、閉じている場合は内部が連続しています。

ST_Polygon

  • 一連のポイントとして格納される 2D サーフェスであり、外部の境界リングと 0 個以上の内部リングを定義します。
  • ST_Polygon には面積があり、常にシンプルです。
  • 外部リングと内部リングは ST_Polygon の境界を定義し、リング間で囲まれた空間は ST_Polygon の内部を定義します。
  • ST_Polygon のリングは接点で交わる場合がありますが、決して交差しません。

ST_MultiPoint

  • ST_Point のコレクション。
  • ディメンションは 0 です。
  • ST_MultiPoint は、同じ座標空間を占めるエレメントが 1 つもなければ、シンプルです。
  • ST_MultiPoint の境界は NULL です。

ST_MultiLineString

  • ST_LineString のコレクション。
  • ST_MultiLineString には長さがあります。
  • ST_MultiLineString は、ST_LineString エレメントの端点でのみ交わる場合はシンプルです。
  • ST_LineString エレメントの内部が交差している場合、ST_MultiLineString はシンプルではありません。
  • ST_MultiLineString の境界は、ST_LineString エレメントの交差していない端点です。
  • ST_MultiLineString が閉じているのは、すべての ST_LineString エレメントが閉じている場合です。
  • ST_MultiLineString のすべてのエレメントのすべての端点が交差している場合、ST_MultiLineString の境界は NULL です。

ST_MultiPolygon

  • ポリゴンのコレクション。
  • ST_MultiPolygon には面積があります。
  • ST_MultiPolygon の境界は、そのエレメントの外部リングと内部リングの長さを累積したものです。
  • ST_MultiPolygon の内部は、そのエレメントである ST_Polygon の内郭を累積したものとして定義されます。
  • ST_MultiPolygon のエレメントの境界は接点でのみ交わる場合があります。

ST_Geometry サブタイプ

各サブクラスは ST_Geometry スーパークラスのプロパティを継承しますが、サブタイプ固有のプロパティもあります。ST_Geometry データ タイプで使用できる関数は、サブクラス エンティティ タイプでも使用できます。ただし、一部の関数はサブクラス レベルで定義されており、特定のサブクラスにしか対応しません。たとえば、ST_GeometryN 関数には、引数として ST_MultiLinestring、ST_MultiPoint、ST_MultiPolygon サブタイプのみを渡すことができます。

ST_Geometry のサブクラスを検出するには、ST_GeometryType 関数を使用できます。ST_GeometryType 関数は、ST_Geometry を受け取り、インスタンス化されたサブクラスを文字列形式で返します。同種コレクションに含まれているベース ジオメトリ エレメントの数を取得するには、ST_NumGeometries 関数を使用できます。この関数は、同種コレクションを受け取り、コレクションに含まれているベース ジオメトリ エレメントの数を返します。

5/10/2014