書式
SDO_UTIL.SIMPLIFY( geometry IN SDO_GEOMETRY, threshold IN NUMBER tolerance IN NUMBER DEFAULT 0.0000005, remove_loops IN NUMBER DEFAULT 0 ) RETURN SDO_GEOMETRY;
説明
Douglas-Peuckerアルゴリズムを使用して、しきい値に基づいて入力ジオメトリを簡略化します。
パラメータ
簡略化するジオメトリを指定します。
ジオメトリの簡略化に使用するしきい値を指定します。正の数字を指定する必要があります。(0 (ゼロ)を指定した場合、入力ジオメトリが戻されます。)入力ジオメトリが測地ジオメトリである場合、値はm単位になります。非測地ジオメトリである場合、値はデータに関連付けられた単位の数値になります。
しきい値が小さくなると、戻されるジオメトリは入力ジオメトリにより近くなり、しきい値が大きくなると、戻されるジオメトリの点は少なくなります。詳細は、「使用上の注意」を参照してください。
許容差(「許容差」を参照)。この値は、threshold
以下にする必要があります。パフォーマンスを向上させるには、threshold
と同じ値を指定しないでください。値を指定しない場合のデフォルト値は、0.0000005です。
一部の線ジオメトリでは、線を簡略化すると、途中で自己交差するループとなることがあります。これは(線としては)有効なジオメトリですが、場合によっては、簡略化操作の結果にこれらのループが存在することは望ましくないことがあります。0
の値(デフォルト)を指定すると、このようなループは除去されません。1
の値(または、他の任意の正の数)を指定すると、このようなループはすべて除去され、単純な線セグメントが常に戻されます。
使用上の注意
このファンクションでは他に、円弧から線ストリングへの変換、重複している頂点の削除、およびポリゴンのエッジの重複の修正も行われます。このファンクションで問題が修正させるのは、有効なジオメトリが確実に戻されるように、簡略化プロセスの最後でSDO_UTIL.RECTIFY_GEOMETRYファンクションを内部的にコールする場合があるためです。
このファンクションは、元のジオメトリよりも解像度の低いジオメトリが必要な場合に有効です。たとえば、川筋または行政的境界の多数のカーブをディスプレイの解像度で表示できない場合、ジオメトリを簡略化して主なカーブのみを表示させると、パフォーマンスが向上する場合があります。
3次元以上のジオメトリにこのファンクションを使用する場合、最初の2次元のみが問合せ処理で使用され、戻されるジオメトリの最初の2次元のみが有効とみなされます。
このファンクションで使用されるDouglas-Peuckerアルゴリズムの詳細は、地図作成法に関する書籍および参考資料を参照してください。(これらのドキュメントでは、しきい値のかわりに許容差という用語が使用される場合もありますが、Oracle Spatial and Graphの許容差とは意味が異なります。)
このファンクションを、Visvalingham-Whyattアルゴリズムを使用するSDO_UTIL.SIMPLIFYVWと比較してください。
戻されるジオメトリは、ジオメトリの定義およびしきい値に応じてポリゴン、線または点となります。適用される考慮点は次のとおりです。
•ジオメトリに関連付けられたしきい値が十分に大きい場合、ポリゴンを線または点に、線を点に簡略化できます。たとえば、細長い矩形の平行な2長辺間の距離がしきい値よりも小さい場合、その矩形は線に簡略化されます。線の開始点と終了点の間の距離がしきい値よりも小さい場合、その線は点に簡略化されます。
穴のあるポリゴンで、外部の輪または内部の輪(穴)が線または点に簡略化される場合、内部の輪は結果のジオメトリには存在しなくなります(結果のジオメトリには含まれません)。
入力ジオメトリの位相特性は、簡略化後には保持されない場合があります。集合ジオメトリの場合は、個々の要素が重ならないようにするため、要素の数が増えることがあります。どのような場合でも、このファンクションが無効なジオメトリを戻すことはありません。
このファンクションは、線形参照システム(LRS)ジオメトリ(「線形参照システム」を参照)ではサポートされません。
例
次の例では、「LRSファンクションの例」の図7-20に示す道路の頂点を反映した線ストリング・ジオメトリを簡略化します(ただし、この例のジオメトリはLRSジオメトリではありません)。しきい値は6であるため、結果の線ストリングには、開始点、終了点および(12, 4,12)の3つの点のみが含まれます。
SELECT SDO_UTIL.SIMPLIFY( SDO_GEOMETRY( 2002, -- line string, 2 dimensions (X,Y) NULL, NULL, SDO_ELEM_INFO_ARRAY(1,2,1), -- one line string, straight segments SDO_ORDINATE_ARRAY( 2,2, -- Starting point 2,4, 8,4, 12,4, 12,10, 8,10, 5,14) -- Ending point ), 6, -- threshold value for geometry simplification 0.5 -- tolerance ) FROM DUAL; SDO_UTIL.SIMPLIFY(SDO_GEOMETRY(2002,--LINESTRING,2DIMENSIONS(X,Y)NULL,NULL,SDO_E -------------------------------------------------------------------------------- SDO_GEOMETRY(2002, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY( 2, 2, 12, 4, 5, 14))
図31-1に、この例の結果を示します。図31-1では、黒い太実線が結果のジオメトリを示し、開始点と終了点の間の薄い色の細実線が入力ジオメトリを示しています。