4.7 SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY

構文

SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(     
  topology  IN VARCHAR2,      
  polygon   IN SDO_GEOMETRY      
) RETURN SDO_NUMBER_ARRAY;

または

SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(     
  topology  IN VARCHAR2,      
  coords    IN SDO_NUMBER_ARRAY      
) RETURN SDO_NUMBER_ARRAY;

説明

指定したポリゴン・ジオメトリを表すフェイスを1つ以上追加し、追加された各フェイスのフェイスIDを戻します。

パラメータ

topology

フェイスを追加するトポロジの名前を指定するか、更新可能なTopoMapオブジェクトを使用している場合はNULLを指定します(「トポロジ・パラメータの編集方法の指定」を参照)。名前は20文字以下である必要があります。

polygon

追加するフェイスを表すSDO_GEOMETRYオブジェクト(ポリゴン・ジオメトリまたは複数のポリゴンで構成されるジオメトリ)を指定します。オブジェクトの各ポリゴンには、任意の数の内部リングを含めることのできる外部リングが1つ必要です。

coords

追加されるフェイスを表す1つのポリゴン・ジオメトリの座標を指定するSDO_NUMBER_ARRAYオブジェクトを指定します。ポリゴンの頂点は反時計周りで示され、最後の頂点が最初の頂点と同じになる必要があります。

使用上のノート

このファンクションは、少なくとも1つの新しいフェイスを作成し、必要に応じて複数の新しいフェイスを作成します。たとえば、ポリゴン・ジオメトリが既存のフェイスと交差している場合、追加されたポリゴンに対してフェイスが作成され、既存のフェイス(交差されたフェイス)の定義が調整されます。topologyがNULLではない場合、Spatialは必要に応じて自動的に<topology-name>_FACE$を更新します。(topologyがNULLの場合は、SDO_TOPO_MAP.UPDATE_TOPO_MAPプロシージャをコールして、いつでもこの表を更新できます。)

ポリゴンが既存のフェイスと一致する場合、トポロジは変更されません。

複数のポリゴンで構成されるジオメトリの場合は、外部リングを別の外部リングに重ねることはできません。たとえば、公園(外部リング)の中に池(内部リング)がありその池の中に島(前述の内部リング内にある外部リング)が含まれているような、複数のポリゴンで構成される単一のジオメトリを表すフェイスを追加することはできません。

このファンクションの動作は、クライアント側のJava APIに含まれるTopoMapクラス(「トポロジ・データ・モデルのJavaインタフェース」を参照)のaddPolygonGeometryメソッドを使用する場合と同じです。

次の例では、指定したポリゴン・ジオメトリを表すフェイスを追加し、追加されたエッジのフェイスIDを戻して出力します。ここでは、現行の更新可能なTopoMapオブジェクトを使用します。

DECLARE
  res_number_array SDO_NUMBER_ARRAY;
  face_count NUMBER;
  face_ctr NUMBER;
  this_face NUMBER;
BEGIN
res_number_array := SDO_TOPO_MAP.ADD_POLYGON_GEOMETRY(null,
  SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1,1003,1),
    SDO_ORDINATE_ARRAY(61,10, 70,10, 70,15, 65,15, 61,10)));
-- DBMS_OUTPUT.PUT_LINE('Result = ' || res_number_array);
-- Print each face associated with the geometry.
face_count := res_number_array.count;
for face_ctr in 1..face_count loop
  this_face := res_number_array(face_ctr);
  dbms_output.put_line ('this face = '|| this_face);
  end loop;  -- printed each face
END;
/
this face = 12