1.3 トポロジ・ジオメトリおよびトポロジ・ジオメトリ・レイヤー

トポロジ ジオメトリ(フィーチャともいう)は、実際のオブジェクトの空間表現です。たとえば、Main Street(大通り)やWalden State Park(ウォールデン州立公園)というトポロジ・ジオメトリが存在する場合があります。

ジオメトリは、位相要素(ノード、エッジおよびフェイス)のセットとして格納され、位相要素はプリミティブとも呼ばれます。各トポロジ・ジオメトリには、(レコードのインポートまたはロード時にSpatialが割り当てた)一意のIDが関連付けられています。

トポロジ・ジオメトリ・レイヤーは、複数のトポロジ・ジオメトリ・タイプの集合で構成することもできますが、一般的には特定のタイプで構成されています(コレクション・レイヤーについては、「コレクション・レイヤー」を参照してください)。たとえば、Main Streetトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーは、Streets (通り)とすることができます。また、Walden State Parkトポロジ・ジオメトリを含むトポロジ・ジオメトリ・レイヤーは、State Parks (州立公園)とすることができます。各トポロジ・ジオメトリ・レイヤーには、(Spatialが割り当てた)一意のIDが関連付けられています。各トポロジ・ジオメトリ・レイヤーのデータは、フィーチャ表に格納されます。たとえば、CITY_STREETSというフィーチャ表には、Streetsトポロジ・ジオメトリ・レイヤー内のすべてのトポロジ・ジオメトリ(個々の道路および通り)に関する情報が含まれています。

各トポロジ・ジオメトリ(フィーチャ)は、SDO_TOPO_GEOMETRY型のオブジェクト(「SDO_TOPO_GEOMETRY型」を参照)として定義します。このオブジェクトでは、トポロジのトポロジ・ジオメトリ・タイプ、トポロジ・ジオメトリID、トポロジ・ジオメトリ・レイヤーIDおよびトポロジIDを定義します。

トポロジ・メタデータは、Spatialによって自動的にUSER_SDO_TOPO_METADATAビューおよびALL_SDO_TOPO_METADATAビュー(「xxx_SDO_TOPO_METADATAビュー」を参照)に保持されます。USER_SDO_TOPO_INFOビューおよびALL_SDO_TOPO_INFOビュー(「xxx_SDO_TOPO_INFOビュー」を参照)には、このトポロジ・メタデータのサブセットが含まれます。

1.3.1 フィーチャ

多くの場合、トポロジ内にはフィーチャより多くの位相要素(ノード、エッジおよびフェイス)が含まれます。たとえば、1つの道路フィーチャが多くのエッジで構成されたり、公園などの1つの領域フィーチャが多くのフェイスで構成される場合があります。また、点フィーチャにノードが関連付けられない場合もあります。図1-3に、「トポロジ・データ・モデルの概念」図1-1に示したトポロジに関連付けられた点フィーチャ、線フィーチャおよび領域フィーチャを示します。

図1-3 トポロジ内のフィーチャ

図1-3の説明が続きます
図1-3「トポロジ内のフィーチャ」の説明

図1-3に示すトポロジ内のフィーチャの種類は次のとおりです。

  • 点フィーチャ(道路標識): 黒い丸S1S2S3およびS4として示しています。

  • 線フィーチャ(道路または通り): 破線R1R2R3およびR4として示しています。

  • 領域フィーチャ(土地区画): 矩形P1P2P3P4およびP5として示しています。

    土地区画P5の領域には、グレーの領域は含まれません。(つまり、P5はフェイスF1を含みますが、フェイスF9は含みません。これらのフェイスは、「トポロジ・データ・モデルの概念」図1-1に示しています。)

「トポロジ・データから作成したトポロジ」例1-12では、これらのフィーチャを定義します。

1.3.2 コレクション・レイヤー

コレクション・レイヤーは、異なるトポロジ・ジオメトリ・タイプの位相要素を含めることのできるトポロジ・ジオメトリ・レイヤーです。たとえば、「トポロジの例(PL/SQL)」の例のCITY_DATAトポロジを使用すると、特定の土地区画、通りおよび道路標識の要素を含むコレクション・レイヤーを作成できます。

コレクション・レイヤーを作成するには、基本的に他のタイプのレイヤーを作成するのと同じステップを実行します。次の例のように、レイヤーのフィーチャ表を作成します。

CREATE TABLE collected_features ( -- Selected heterogeneous features
  feature_name VARCHAR2(30) PRIMARY KEY,
  feature SDO_TOPO_GEOMETRY);

次の例のように、SDO_TOPO.ADD_TOPO_GEOMETRY_LAYERプロシージャのコール時に、topo_geometry_layer_typeパラメータにCOLLECTIONを指定して、フィーチャ表をトポロジに関連付けます。

EXECUTE SDO_TOPO.ADD_TOPO_GEOMETRY_LAYER('CITY_DATA', COLLECTED_FEATURES', 'FEATURE', 'COLLECTION');

コレクション・レイヤーのフィーチャ表をロードするには、例1-1に示すように、必要な行を挿入します。

例1-1 コレクション・レイヤーのフィーチャ表のロード

-- Take R5 from the CITY_STREETS layer.
INSERT INTO collected_features VALUES(
  'C_R5',
  SDO_TOPO_GEOMETRY('CITY_DATA',
    2,  -- tg_type = line/multiline
    4,  -- tg_layer_id
    SDO_TOPO_OBJECT_ARRAY(
      SDO_TOPO_OBJECT(20, 2),
      SDO_TOPO_OBJECT(-9, 2)))
);
 
-- Take S3 from the TRAFFIC_SIGNS layer.
INSERT INTO collected_features VALUES(
  'C_S3',
  SDO_TOPO_GEOMETRY('CITY_DATA',
    1,  -- tg_type = point/multipoint 
    4,  -- topo layer id
    SDO_TOPO_OBJECT_ARRAY(
       SDO_TOPO_OBJECT(6, 1)))
);
 
-- Take P3 from the LAND_PARCELS layer.
INSERT INTO collected_features VALUES(
  'C_P3',
  SDO_TOPO_GEOMETRY('CITY_DATA',
    3,  -- tg_type = (multi)polygon
    4,
    SDO_TOPO_OBJECT_ARRAY(
      SDO_TOPO_OBJECT(5, 3),
      SDO_TOPO_OBJECT(8, 3)))
);
 
-- Create a collection from a polygon and a point.
INSERT INTO collected_features VALUES(
  'C1',
  SDO_TOPO_GEOMETRY('CITY_DATA',
    4,  -- tg_type = collection
    4,
    SDO_TOPO_OBJECT_ARRAY(
      SDO_TOPO_OBJECT(5, 3),
      SDO_TOPO_OBJECT(6, 1)))
);
 
-- Create a collection from a polygon and a line.
INSERT INTO collected_features VALUES(
  'C2',
  SDO_TOPO_GEOMETRY('CITY_DATA',
    4,  -- tg_type = collection
    4,
    SDO_TOPO_OBJECT_ARRAY(
      SDO_TOPO_OBJECT(8, 3),
      SDO_TOPO_OBJECT(10, 2)))
);
                  
-- Create a collection from a line and a point.
INSERT INTO collected_features VALUES(
  'C3',
  SDO_TOPO_GEOMETRY('CITY_DATA',
     4,  -- tg_type = collection
     4,
     SDO_TOPO_OBJECT_ARRAY(
       SDO_TOPO_OBJECT(-5, 2),
       SDO_TOPO_OBJECT(10, 1)))
);