29.3 SDO_PC_PKG.CLIP_PC_FLAT_STRING
書式
SDO_PC_PKG.CLIP_PC_FLAT_STRING( geometry IN SDO_GEOMETRY, table_name IN VARCHAR2, tolerance IN NUMBER, other_dim_qry IN SDO_MBR, mask IN VARCHAR2 DEFAULT NULL, dop IN NUMBER DEFAULT NULL, sdo_level IN NUMBER DEFAULT 4, sdo_ntiles IN NUMBER DEFAULT 100 ) RETURN CLOB;
説明
点群データが平面表に格納された、平面形式の点群でクリップ操作を実行するSQL問合せ文字列を生成します。問合せは実行されませんが、その後の実行または検査のために単に生成されます。
パラメータ
- geometry
-
クリップ・ウィンドウとして使用する2次元ジオメトリです。たとえば:
geometry => SDO_GEOMETRY( 2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 3), SDO_ORDINATE_ARRAY( 0.75, 0.75, 1.25, 1.25))
- table_name
-
点群データを含む表またはビューの名前を指定します。表またはビューの最初の2つの列は、XおよびYという名前で、Oracle NUMBER型にする必要があります。オプションで、XおよびYに続いて、表またはビューにはNUMBER型のZ列と、その他の非空間の点群属性を含めることができます。その他の非空間の点群属性は、任意のデータ型を持つことができますが、
other_dim_qry
パラメータの制約として指定する場合は、Oracle NUMBER型にする必要があります。 - tolerance
-
点群のオブジェクトの許容差を指定します(空間許容差の詳細は、「許容差」を参照してください)。このパラメータがNULLの場合、デフォルト値は0.0000000000005です。
- other_dim_qry
-
Oracle NUMBER型の任意の列(X列とY列を除く)に対する、ユーザー定義の問合せ範囲を提供する最小境界矩形(MBR)を指定します。
SDO_MBR型は
(LOWER_LEFT SDO_VPOINT_TYPE, UPPER_RIGHT SDO_VPOINT_TYPE)
として定義され、SDO_V_POINT_TYPEはVARRAY(64) OF NUMBER
として定義されます。問合せ範囲で制約されない、Oracle NUMBER型の列に対しては、SDO_V_POINT_TYPE配列にNULLを指定します。
次に例を示します。
other_dim_qry => MDSYS.SDO_MBR( SDO_VPOINT_TYPE(10, 81), SDO_VPOINT_TYPE(11, 82))
3番目の値(xおよびyは最初と2番目)は10から11の間であることを意味します。4番目の値は81から82の間になります。
- mask
-
ポリゴンと相互作用する点に適用可能な位相関係を指定します。有効な値は
'mask=
<value>
'
で、<value>
はSDO_RELATE演算子に対して有効な1つ以上のマスク値(TOUCH
、OVERLAPBDYDISJOINT
、OVERLAPBDYINTERSECT
、EQUAL
、INSIDE
、COVEREDBY
、CONTAINS
、COVERS
、ANYINTERACT
、ON
)です。近似チェックを実行するFILTER
も指定できます。FILTER
は、ポリゴンと交差するすべての候補と、その他のいくつかのものを戻します。論理ブール演算子OR
を使用して、'mask=inside+touch'
のように複数のマスクを組み合せることができますが、FILTER
は他のマスクと組み合せることはできません。このパラメータがNULLであるか、または空の文字列を含む場合、
mask=ANYINTERACT
であるとみなされます。 - dop
-
クリップ操作の並列度。これは生成されたSQL文に表示される場合があります。たとえば、
select /*+ PARALLEL ( 16 )*/ * from "LIDAR_DATA" …
- sdo_level
-
四本木分割のレベルを指定します。1から5の値が一般的で、4がデフォルトです。これは生成されるタイルに影響します。たとえば、(x >= 2.2500000125 and x < 2.500000025 and y >= 2.12500000625 and y < 2.7500000375)
- sdo_ntiles
-
生成するタイルの最大数を指定します。1から200の値が一般的で、100がデフォルトです。これは生成されるタイルに影響します。
使用上のノート
このファンクションは、次の点を除いてSDO_PC_PKG.CLIP_PC_FLATファンクションに類似しています。
- 問合せは実行せず、SQL問合せ文字列を単に生成します。
sdo_level
およびsdo_ntiles
パラメータによる詳細なチューニング機能が用意されています。ほとんどの問合せでは、sdo_level=1
およびsdo_ntiles=10
の値が最適です。
SDO_PC_PKG.CLIP_PC_FLATの「使用上のノート」も参照してください。
例
次の例では、X、Y、AおよびVAL (なんらかの値)の列があるLIDAR_DATAという表を作成します。次に、点群でクリップ操作のSQL文を生成し、その後に(個別の文で)実行します。
SQL> create table lidar_data(x number, y number, z number, val number); Table created. SQL> SQL> begin 2 for y in 1..1024 loop 3 for x in 1..1024 loop 4 insert into lidar_data (x, y, z, val) values (x, y, x + y, x * y); 5 end loop; 6 end loop; 7 end; 8 / PL/SQL procedure successfully completed. SQL> SELECT 2 sdo_pc_pkg.clip_pc_flat_string ( 3 geometry => SDO_GEOMETRY( 4 2003, 5 8307, 6 NULL, 7 SDO_ELEM_INFO_ARRAY(1, 1003, 1), 8 SDO_ORDINATE_ARRAY( 9 1, 1, 10 2, 1, 11 2, 2, 12 3, 2, 13 3, 3, 14 1, 3, 15 1, 1)), 16 table_name => 'LIDAR_DATA', 17 tolerance => .00000005, 18 other_dim_qry => MDSYS.SDO_MBR( 19 SDO_VPOINT_TYPE(0, 0), 20 SDO_VPOINT_TYPE(1000, 1000000)), 21 mask => 'FILTER', 22 dop => 16, 23 sdo_level => 4, 24 sdo_ntiles => 100) "Query" 25 FROM 26 dual; Query -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- select /*+ PARALLEL ( 16 )*/ * from "LIDAR_DATA" WHERE ( (x >= 1.2499999625 and x < 1.37499996875 and y >= 1.2499999625 and y < 2.7500000375) OR (x >= 2.7500000375 and x < 2.87500004375 and y >= 2.12500000625 and y < 2.87500004375) OR (x >= 1.37499996875 and x < 1.499999975 and y >= 1.2499999625 and y < 2.7500000375) OR (x >= 2.2500000125 and x < 2.500000025 and y >= 2.12500000625 and y < 2.7500000375) OR (x >= 2.500000025 and x < 2.7500000375 and y >= 2.12500000625 and y < 2.7500000375) OR (x >= 1.12499995625 and x < 1.87499999375 and y >= 1.12499995625 and y < 1.2499999625) OR (x >= 1.7499999875 and x < 2 and y >= 2.12500000625 and y < 2.7500000375) OR (x >= 1.12499995625 and x < 1.2499999625 and y >= 1.2499999625 and y < 2.87500004375) OR (x >= 2 and x < 2.2500000125 and y >= 2.12500000625 and y < 2.7500000375) OR (x >= 1.7499999875 and x < 1.87499999375 and y >= 1.2499999625 and y < 2.12500000625) OR (x >= 1.2499999625 and x < 2.7500000375 and y >= 2.7500000375 and y < 2.87500004375) OR (x >= 1.499999975 and x < 1.62499998125 and y >= 1.2499999625 and y < 2.7500000375) OR (x >= 1.62499998125 and x < 1.7499999875 and y >= 1.2499999625 and y < 2.7500000375)) AND ( "Z" BETWEEN 0 AND 1000 ) AND ( "VAL" BETWEEN 0 AND 1000000 ) UNION ALL select * from "LIDAR_DATA" W HERE ( (x >= .99999995 and x < 1.87499999375 and y >= .99999995 and y < 1.12499995625) OR (x >= .99999995 and x < 1.12499995625 and y >= 1.12499995625 and y < 2.87500004375) OR (x >= .99999995 and x < 2.87500004375 and y >= 2.87500004375 and y < 3.0000000500000001402157) OR (x >= 2 and x < 2.12500000625 and y >= .99999995 and y < 1.87499999375) OR (x >= 1.87499999375 and x < 2 and y >= .99999995 and y < 2.12500000625) OR (x >= 2.87500004375 and x < 3.0000000500000001402157 and y >= 1.87499999375 and y < 3.0000000500000001402157) OR (x >= 2 and x < 2.87500004375 and y >= 2 and y < 2.12500000625) OR (x >= 2 and x < 2.87500004375 and y >= 1.87499999375 and y < 2)) AND ("Z" BETWEEN 0 AND 1000 ) AND ("VAL" BETWEEN 0 AND 1000000 ) 1 row selected. SQL> SQL> declare 2 stm varchar2(4096); 3 begin 4 SELECT 5 sdo_pc_pkg.clip_pc_flat_string ( 6 geometry => SDO_GEOMETRY( 7 2003, 8 8307, 9 NULL, 10 SDO_ELEM_INFO_ARRAY(1, 1003, 1), 11 SDO_ORDINATE_ARRAY( 12 1, 1, 13 2, 1, 14 2, 2, 15 3, 2, 16 3, 3, 17 1, 3, 18 1, 1)), 19 table_name => 'LIDAR_DATA', 20 tolerance => .00000005, 21 other_dim_qry => MDSYS.SDO_MBR( 22 SDO_VPOINT_TYPE(0, 0), 23 SDO_VPOINT_TYPE(1000, 1000000)), 24 mask => 'FILTER', 25 dop => 16, 26 sdo_level => 4, 27 sdo_ntiles => 100) "Query" 28 into 29 stm 30 FROM 31 dual; 32 33 execute immediate 'create table result as (' || stm || ')'; 34 end; 35 / PL/SQL procedure successfully completed. SQL> SQL> select * from result order by x, y; X Y Z VAL ---------- ---------- ---------- ---------- 1 1 2 1 1 2 3 2 1 3 4 3 2 1 3 2 2 2 4 4 2 3 5 6 3 2 5 6 3 3 6 9 8 rows selected. SQL> SQL> drop table result; Table dropped. SQL> drop table lidar_data; Table dropped. SQL> SQL>
親トピック: SDO_PC_PKGパッケージ(点群)