ヘッダーをスキップ
Oracle Spatial開発者ガイド
11g リリース1(11.1)
E05682-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

20 空間集計ファンクション

この章では、表20-1に示す空間集計ファンクションのリファレンス情報および使用方法について説明します。

表20-1 空間集計ファンクション

メソッド 説明

SDO_AGGR_CENTROID


指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。

SDO_AGGR_CONCAT_LINES


指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。

SDO_AGGR_CONVEXHULL


指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。

SDO_AGGR_LRS_CONCAT


指定されたLRSジオメトリ・オブジェクトを連結するLRSジオメトリ・オブジェクトを戻します。

SDO_AGGR_MBR


指定されたジオメトリの最小境界矩形を戻します。

SDO_AGGR_UNION


指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。


空間集計ファンクションの使用方法については、1.10項を参照してください。

これらのほとんどの集計ファンクションには、SDOAGGRTYPE型のパラメータ(1.10.1項を参照)を指定できます。


注意:

2次元と3次元の両方のジオメトリでサポートされているSDO_AGGR_MBR以外の空間集計ファンクションは、2次元ジオメトリでのみサポートされています。


SDO_AGGR_CENTROID

構文

SDO_AGGR_CENTROID(

     AggregateGeometry SDOAGGRTYPE

     ) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

このファンクションの動作は、ジオメトリ・オブジェクトがポリゴンのみで構成されるか、点のみで構成されるか、またはポリゴンと点が混在するかによって異なります。

結果は、ジオメトリ・オブジェクトの各ポリゴンの面積によって重み付けされます。ジオメトリ・オブジェクトにポリゴンおよび点が混在する場合、中心の計算では点が使用されません。ジオメトリ・オブジェクトが点のみで構成される場合、それらの点は均等に重み付けされます。

SDO_GEOM.SDO_CENTROIDファンクションの詳細は、第24章を参照してください。

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの中心を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_CENTROID(SDOAGGRTYPE(shape, 0.005))
  FROM cola_markets;

SDO_AGGR_CENTROID(SDOAGGRTYPE(SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POINT
--------------------------------------------------------------------------------
SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(5.21295938, 5.00744233, NULL), NULL, NUL
L)

SDO_AGGR_CONCAT_LINES

構文

SDO_AGGR_CONCAT_LINES(

     geom SDO_GEOMETRY

     ) RETURN SDO_GEOMETRY;

説明

指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

使用上の注意

各入力ジオメトリは、単一線または複数線の2次元ジオメトリ(SDO_GTYPE値が2002または2006)である必要があります。このファンクションは、LRSジオメトリではサポートされません。LRSジオメトリ・セグメントの集計連結を実行するには、SDO_AGGR_LRS_CONCAT空間集計ファンクションを使用します。

入力ジオメトリは、頂点が直線セグメントに連結している線ストリングである必要があります。円弧および複合線ストリングはサポートされていません。

いずれかの入力ジオメトリが複数線のジオメトリである場合は、ジオメトリの各要素は非接続である必要があります。非接続でない場合、このファンクションは不適切な結果を戻すことがあります。

連結される各ペアのジオメトリ間の位相関係は、DISJOINTまたはTOUCHである必要があります。位相関係がTOUCHの場合、ジオメトリは2つの終了点でのみ交差する必要があります。

SDO_UTIL.CONCAT_LINESファンクション(第32章を参照)を使用すると、2つの単一線または複数線のジオメトリを連結できます。

いずれかの入力ジオメトリが単一線または複数線のジオメトリではない場合、またはすべての入力ジオメトリが同じ座標系に基づいていない場合、例外が発生します。

次の例では、2つの線ジオメトリをCOLA_MARKETS表に挿入し、これらのジオメトリの集計連結を戻します。(例では、2.1項の定義およびデータを使用しています。)

-- First, insert two line geometries.
INSERT INTO cola_markets VALUES(1001, 'line_1', SDO_GEOMETRY(2002, NULL, NULL,
  SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(1,1, 5,1)));
INSERT INTO cola_markets VALUES(1002, 'line_2', SDO_GEOMETRY(2002, NULL, NULL,
  SDO_ELEM_INFO_ARRAY(1,2,1), SDO_ORDINATE_ARRAY(5,1, 8,1)));
-- Perform aggregate concatenation of all line geometries in layer.
SELECT SDO_AGGR_CONCAT_LINES(c.shape) FROM cola_markets c
   WHERE c.mkt_id > 1000;

SDO_AGGR_CONCAT_LINES(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM
--------------------------------------------------------------------------------
SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
1, 1, 5, 1, 8, 1))

SDO_AGGR_CONVEXHULL

構文

SDO_AGGR_CONVEXHULL(

     AggregateGeometry SDOAGGRTYPE

     ) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

SDO_GEOM.SDO_CONVEXHULLファンクションの詳細は、第24章を参照してください。

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの凸型部分を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_CONVEXHULL(SDOAGGRTYPE(shape, 0.005))
  FROM cola_markets;

SDO_AGGR_CONVEXHULL(SDOAGGRTYPE(SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POI
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR
AY(8, 1, 10, 7, 10, 11, 8, 11, 6, 11, 1, 7, 1, 1, 8, 1))

SDO_AGGR_LRS_CONCAT

構文

SDO_AGGR_LRS_CONCAT(

     AggregateGeometry SDOAGGRTYPE

     ) RETURN SDO_GEOMETRY;

説明

指定されたLRSジオメトリを連結するLRSジオメトリを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

このファンクションは、任意の数のLRSジオメトリの集計連結を実行します。ジオメトリを連結する順序を制御する必要がある場合、NO_MERGEオプティマイザ・ヒントおよびORDER BY句を指定した副問合せを使用する必要があります(「例」を参照)。

結果のセグメントの方向は、連結内の最初のジオメトリの方向と同じになります。

このファンクションは3D形式(SDO_AGGR_LRS_CONCAT_3D)が使用可能です。LRSファンクションの3D形式については、7.4項を参照してください。

Spatialの線形参照システムについては、第7章を参照してください。

次の例では、LRS_ROUTES表にLRSジオメトリを追加し、次に、表に含まれるLRSジオメトリを連結する2つの問合せを実行します。最初の問合せでは、連結の順序は制御されません。連結の順序は、2番目の問合せで制御されます。2つのセグメントの方向が異なることに注意してください。連結(Route0)の最初のセグメントのメジャー値が降順であるため、2番目の問合せ結果のセグメントのメジャー値は降順です。(例では、7.7項の例の定義を使用しています。)

-- Add a segment with route_id less than 1 (here, zero).
INSERT INTO lrs_routes VALUES(
  0,
  'Route0',
  SDO_GEOMETRY(
    3302,  -- Line string; 3 dimensions (X,Y,M); 3rd is measure dimension.
    NULL,
    NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1), -- One line string, straight segments
    SDO_ORDINATE_ARRAY(
      5,14,5,   -- Starting point - 5 is measure from start.
      10,14,0)  -- Ending point - 0 measure (decreasing measure)
  )
);

1 row created.

-- Concatenate all routes (no ordering specified).
SELECT SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(route_geometry, 0.005))
    FROM lrs_routes;

SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(ROUTE_GEOMETRY,0.005))(SDO_GTYPE, SDO_SRID
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 0, 2, 4, 2, 8, 4, 8, 12, 4, 12, 12, 10, 18, 8, 10, 22, 5, 14, 27, 10, 14,
32))

-- Aggregate concatenation using subquery for ordering.
SELECT
SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(route_geometry, 0.005))
FROM (
             SELECT /*+ NO_MERGE */ route_geometry
             FROM lrs_routes
             ORDER BY route_id);

SDO_AGGR_LRS_CONCAT(SDOAGGRTYPE(ROUTE_GEOMETRY,0.005))(SDO_GTYPE, SDO_SRID
--------------------------------------------------------------------------------
SDO_GEOMETRY(3302, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(
2, 2, 32, 2, 4, 30, 8, 4, 24, 12, 4, 20, 12, 10, 14, 8, 10, 10, 5, 14, 5, 10, 14
, 0))

SDO_AGGR_MBR

構文

SDO_AGGR_MBR(

     geom SDO_GEOMETRY

     ) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリの最小境界矩形(MBR)(ジオメトリを囲む最小の矩形)を戻します。

パラメータ

geom

ジオメトリ・オブジェクトを指定します。

使用上の注意

このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。

SDO_TUNE.EXTENT_OFファンクション(第31章を参照)も、ジオメトリのMBRを戻します。データが非測地で、空間索引がジオメトリ列上に定義されている場合、SDO_TUNE.EXTENT_OFファンクションは、SDO_AGGR_MBRファンクションよりも高いパフォーマンスを示します。ただし、SDO_TUNE.EXTENT_OFファンクションは2次元ジオメトリに制限されるのに対し、SDO_AGGR_MBRファンクションにはその制限がありません。また、SDO_TUNE.EXTENT_OFファンクションは、表内のすべてのジオメトリに対するエクステントを計算しますが、SDO_AGGR_MBRファンクションは、行のサブセット上での操作が可能です。

次の例では、COLA_MARKETS表のジオメトリ・オブジェクトの最小境界矩形を戻します。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_MBR(shape) FROM cola_markets;

SDO_AGGR_MBR(C.SHAPE)(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SD
--------------------------------------------------------------------------------
SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARR
AY(1, 1, 10, 11))

SDO_AGGR_UNION

構文

SDO_AGGR_UNION(

     AggregateGeometry SDOAGGRTYPE

     ) RETURN SDO_GEOMETRY;

説明

指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。

パラメータ

AggregateGeometry

ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。

使用上の注意

単一線ストリングまたは複数線ストリングのジオメトリをマージするには、SDO_AGGR_UNIONは使用せず、SDO_AGGR_CONCAT_LINES空間集計ファンクションを使用します。

SDO_GEOM.SDO_UNIONファンクションの詳細は、第24章を参照してください。

次の例では、cola_dを除くすべてのジオメトリ(この例では、cola_acola_bおよびcola_c)の和集合が戻されます。(例では、2.1項の定義およびデータを使用しています。)

SELECT SDO_AGGR_UNION(
  SDOAGGRTYPE(c.shape, 0.005))
  FROM cola_markets c
  WHERE c.name <> 'cola_d';

SDO_AGGR_UNION(SDOAGGRTYPE(C.SHAPE,0.005))(SDO_GTYPE, SDO_SRID, SDO_POINT(
--------------------------------------------------------------------------------
SDO_GEOMETRY(2007, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 2, 11, 1003, 1), SDO
_ORDINATE_ARRAY(8, 11, 6, 9, 8, 7, 10, 9, 8, 11, 1, 7, 1, 1, 5, 1, 8, 1, 8, 6, 5
, 7, 1, 7))

SDO_AGGR_UNIONのより複雑な例については、C.4項を参照してください。