2.8 ジオメトリのメタデータ・ビュー

次元、上限と下限および各次元の許容差を記述するジオメトリのメタデータは、MDSYSが所有するグローバル表に格納されます。ユーザーは、このグローバル表を直接更新しないでください。Spatialの各ユーザーには、そのユーザーに関連付けられたスキーマで使用可能な次のビューがあります。

  • USER_SDO_GEOM_METADATAには、ユーザーが所有するすべての空間表(スキーマ)についてのメタデータ情報が含まれます。このビューのみが更新可能であり、Spatialユーザーが空間表に関連するメタデータを挿入する必要があるビューです。

  • ALL_SDO_GEOM_METADATAには、ユーザーがSELECT権限を持つ、すべての空間表のメタデータ情報が含まれます。

これらのビューの移入は、Spatialのユーザーの責任において行います。各空間列について、USER_SDO_GEOM_METADATAビューに対応する行を挿入する必要があります。ただし、リリース23aiからは、空間メタデータを更新しない場合、Oracle Spatialが、デフォルトの許容差0.05を使用して、空間索引の作成時に自動的に作成します。必要なメタデータを作成するには、Oracle Spatialで少なくとも1つのNULL以外のジオメトリ行が表に移入される必要があることに注意してください。ALL_SDO_GEOM_METADATAビューも更新され、USER_SDO_GEOM_METADATAに挿入された行が確実に反映されます。

各メタデータ・ビューは、次のとおり定義されています。

(
  TABLE_NAME   VARCHAR2(32),
  COLUMN_NAME  VARCHAR2(32),
  DIMINFO      SDO_DIM_ARRAY,
  SRID         NUMBER
);

また、ALL_SDO_GEOM_METADATAビューには、TABLE_NAMEで指定した表を所有するスキーマを識別するOWNER列があります。

次に、Oracle Spatialメタデータ・ビューに格納されるスキーマ名、表名、列名、索引名およびSDO_DIMNAME値に関する注意事項を示します。

  • これらは、文字、数字およびアンダースコアのみで構成する必要があります。たとえば、このような名前には、空白( )、アポストロフィ(')、引用符(")またはカンマ(,)を含めることはできません。

  • 名前がジオメトリのメタデータ・ビューに格納される前、または表がアクセスされる前に、名前に含まれるすべての文字が大文字に変換されます。表名で指定されるすべてのスキーマ名も、同様に変換されます。

    ノート:

    引用符で囲まれた、大/小文字が混在する(キャメルケースの)名前を使用する場合、大/小文字の変換は適用されません。ただし、多くの専門家が大/小文字が混在する名前の使用を推奨していないことに注意してください。

2.8.1 TABLE_NAME

TABLE_NAME列には、COLA_MARKETSなどのフィーチャ表の名前が含まれます。このフィーチャ表には、SDO_GEOMETRY型の列があります。

表名は、空間メタデータ・ビューにすべて大文字で格納されます。

表名をUSER_SDO_GEOM_METADATAビューに挿入する場合、空白または大/小文字が混在した文字列を引用符で囲んで指定することはできません。また、問合せで使用する場合は、(すべて大文字でないかぎり)引用符で囲むことはできません。

空間列に空間索引を作成する場合、空間フィーチャ表を索引構成表にすることはできません。

2.8.2 COLUMN_NAME

COLUMN_NAME列には、SDO_GEOMETRY型の列名が含まれます。COLA_MARKETS表の場合、この列をSHAPEといいます。

列名は、空間メタデータ・ビューにすべて大文字で格納されます。

列名は、USER_SDO_GEOM_METADATAビューに挿入する場合、空白または大/小文字が混在した文字列を引用符で囲んで指定することができません。また、問合せで使用する場合は、(すべて大文字でないかぎり)引用符で囲むことはできません。

2.8.3 DIMINFO

DIMINFO列は、オブジェクト型の可変長配列であり、次元によって指定され、次元ごとに1つのエントリがあります。SDO_DIM_ARRAY型は、次のとおり定義されます。

Create Type SDO_DIM_ARRAY as VARRAY(4) of SDO_DIM_ELEMENT; 

SDO_DIM_ELEMENT型は、次のとおり定義されます。

Create Type SDO_DIM_ELEMENT as OBJECT (
  SDO_DIMNAME VARCHAR2(64),
  SDO_LB NUMBER,
  SDO_UB NUMBER,
  SDO_TOLERANCE NUMBER);

n次元の場合、SDO_DIM_ARRAYインスタンスは、サイズがnのインスタンスです。DIMINFOには、2次元のジオメトリに対して2つ、3次元のジオメトリに対して3つ、4次元のジオメトリに対して4つのSDO_DIM_ELEMENTインスタンスが含まれます。配列の各SDO_DIM_ELEMENTインスタンスには、SDO_LB、SDO_UBおよびSDO_TOLERANCE属性に対する有効な(NULL以外の)値が必要です。

ノート:

DIMINFO情報に反映される次元数は、レイヤー内の各ジオメトリ・オブジェクトの次元数に一致している必要があります。

許容差の説明および適切なSDO_TOLERANCE値の決定方法については、「許容差」(特に「レイヤーのジオメトリ・メタデータの許容差」)を参照してください。

Spatialでは、可変長配列は次元によって指定されるとみなされます。DIMINFO可変長配列は、SDO_ORDINATES可変長配列の点の縦座標と同じ方法で、次元によって指定される必要があります。たとえば、SDO_ORDINATES可変長配列に{X1, Y1, ..., Xn, Yn}が含まれる場合、最初のDIMINFOエントリはX次元を定義し、2番目のDIMINFOエントリはY次元を定義する必要があります。

「空間データの挿入、索引付けおよび問合せの例」では、SDO_GEOMETRY型とSDO_DIM_ARRAY型の使用方法を示しています。その例は、ジオメトリ・オブジェクト(コーラの仮想マーケット領域)の表現方法、およびCOLA_MARKETSフィーチャ表とUSER_SDO_GEOM_METADATAビューにそれらのオブジェクトのデータを移入する方法を示しています。

2.8.3.1 ジオメトリのX/Y/Z次元の最小値と最大値を取得するためのSQLファンクション

次のSQLファンクションを使用すると、表内の空間列にあるデータについてX、YおよびZ次元の最小値と最大値を確認できます。

SDO_GEOM_MIN_X(<column-name>)
SDO_GEOM_MIN_Y(<column-name>)
SDO_GEOM_MIN_Z(<column-name>)
SDO_GEOM_MAX_X(<column-name>)
SDO_GEOM_MAX_Y(<column-name>)
SDO_GEOM_MAX_Z(<column-name>)

次の例では、COLA_MARKETS表内のcola_cというジオメトリ・オブジェクトについて、X次元の最小値と最大値、およびY次元の最小値と最大値が戻されます。

SQL> select SDO_GEOM_MIN_X(SHAPE), SDO_GEOM_MAX_X(SHAPE) from cola_markets where name = 'cola_c';

SDO_GEOM_MIN_X(SHAPE) SDO_GEOM_MAX_X(SHAPE)
--------------------- ---------------------
             3.0E+000              6.0E+000

SQL> select SDO_GEOM_MIN_Y(SHAPE), SDO_GEOM_MAX_Y(SHAPE) from cola_markets where name = 'cola_c';

SDO_GEOM_MIN_Y(SHAPE) SDO_GEOM_MAX_Y(SHAPE)
--------------------- ---------------------
             3.0E+000              5.0E+000

2.8.4 SRID

SRID列は、列にあるすべてのジオメトリに対する座標系のSRID値、またはジオメトリに座標系が関連付けられていない場合はNULLを含む必要があります。