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パッケージ(点群)