この章では、表20-1に示す空間集計ファンクションのリファレンス情報および使用方法について説明します。
表20-1 空間集計ファンクション
メソッド | 説明 |
---|---|
|
指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。 |
|
指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。 |
|
指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。 |
|
指定されたLRSジオメトリ・オブジェクトを連結するLRSジオメトリ・オブジェクトを戻します。 |
|
指定されたジオメトリの最小境界矩形を戻します。 |
|
指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。 |
空間集計ファンクションの使用方法については、1.10項を参照してください。
これらのほとんどの集計ファンクションには、SDOAGGRTYPE型のパラメータ(1.10.1項を参照)を指定できます。
構文
SDO_AGGR_CENTROID(
AggregateGeometry SDOAGGRTYPE
) RETURN SDO_GEOMETRY;
説明
指定されたジオメトリ・オブジェクトの中心(重心)にあるジオメトリ・オブジェクトを戻します。
パラメータ
ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。
使用上の注意
このファンクションの動作は、ジオメトリ・オブジェクトがポリゴンのみで構成されるか、点のみで構成されるか、またはポリゴンと点が混在するかによって異なります。
ジオメトリ・オブジェクトがポリゴンのみで構成される場合、すべてのオブジェクトの中心が戻されます。
ジオメトリ・オブジェクトが点のみで構成される場合、すべてのオブジェクトの中心が戻されます。
ジオメトリ・オブジェクトにポリゴンと点が混在する(1つ以上のポリゴンと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(
geom SDO_GEOMETRY
) RETURN SDO_GEOMETRY;
説明
指定された単一線または複数線のジオメトリを連結するジオメトリを戻します。
パラメータ
ジオメトリ・オブジェクトを指定します。
使用上の注意
各入力ジオメトリは、単一線または複数線の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(
AggregateGeometry SDOAGGRTYPE
) RETURN SDO_GEOMETRY;
説明
指定されたジオメトリ・オブジェクトの凸型部分であるジオメトリ・オブジェクトを戻します。
パラメータ
ジオメトリ列および次元配列を指定する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(
AggregateGeometry SDOAGGRTYPE
) RETURN SDO_GEOMETRY;
説明
指定されたLRSジオメトリを連結するLRSジオメトリを戻します。
パラメータ
ジオメトリ列および次元配列を指定する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(
geom SDO_GEOMETRY
) RETURN SDO_GEOMETRY;
説明
指定されたジオメトリの最小境界矩形(MBR)(ジオメトリを囲む最小の矩形)を戻します。
パラメータ
ジオメトリ・オブジェクトを指定します。
使用上の注意
このファンクションは、適切なMBRを作成できない場合はMBRジオメトリを戻しません。具体的には、次のとおりです。
入力ジオメトリがすべてNULLである場合、ファンクションはNULLのジオメトリを戻します。
入力ジオメトリ内のすべてのデータが1つの点上にある場合、ファンクションは点を戻します。
入力ジオメトリ内のすべてのデータが直線上に存在する複数の点である場合、ファンクションは2点線を戻します。
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(
AggregateGeometry SDOAGGRTYPE
) RETURN SDO_GEOMETRY;
説明
指定されたジオメトリ・オブジェクトで位相的な和集合(OR演算)となるジオメトリ・オブジェクトを戻します。
パラメータ
ジオメトリ列および次元配列を指定するSDOAGGRTYPE型のオブジェクト(1.10.1項を参照)を指定します。
使用上の注意
単一線ストリングまたは複数線ストリングのジオメトリをマージするには、SDO_AGGR_UNIONは使用せず、SDO_AGGR_CONCAT_LINES空間集計ファンクションを使用します。
SDO_GEOM.SDO_UNIONファンクションの詳細は、第24章を参照してください。
例
次の例では、cola_d
を除くすべてのジオメトリ(この例では、cola_a
、cola_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項を参照してください。