5.2 セル値ベースの条件付き問合せ
セル値ベースの条件付き問合せを使用すると、指定された条件に基づいて新しいGeoRasterオブジェクトを生成できます。
ラスターに対する空間ベースの問合せでの使用に加え(SDO_GEOR.getRasterSubsetの使用など)、分析およびアプリケーション・モデリングではセル値ベースの問合せが特に便利です。セル値ベースの条件付き問合せを実行し、指定した条件に基づいて新しいGeoRasterオブジェクトを生成するには、SDO_GEOR_RA.findCellsプロシージャを使用して適切なcondition
パラメータを指定します。
condition
パラメータでは、有効なbooleanExpr
値(「ラスター代数言語」を参照)を指定する必要があります。プロシージャは、ソースGeoRasterオブジェクトの各セルに対してbooleanExpr
を計算します。結果がTRUE
の場合、元のセル値が出力GeoRasterオブジェクトに維持され、結果がFALSE
の場合、bgValues
を使用して出力GeoRasterオブジェクトのセル値が入力されます。これは、マスキング操作と考えることもできます。
例5-4 条件付き問合せ
例5-4では、SDO_GEOR_RA.findCellsプロシージャをコールして、2番目のバンドの値が200より大きいすべてのピクセルを検出します。bgValuesパラメータが指定されていないため、値0が背景値として使用され、条件がfalseになるすべてのピクセルが入力されます。この例では、ソースGeoRasterオブジェクトが3つ以上のバンドを持つイメージであると仮定します。
DECLARE geor SDO_GEORASTER; geor1 SDO_GEORASTER; BEGIN SELECT georaster INTO geor FROM georaster_table WHERE georid = 1; INSERT into georaster_table values (5, sdo_geor.init('rdt_1', 5)) returning georaster into geor1; sdo_geor_ra.findcells(geor, '{ 1 }>200', 'blocking=optimalpadding, blocksize=(512,512,3)', geor1); UPDATE georaster_table set georaster = geor1 WHERE georid = 5; COMMIT; END; / -- This pixel is set to (0,0,0) because the cell value of the -- second band is 136, which is not greater than 200. SELECT sdo_geor.getcellvalue(georaster,0,30,30,'') FROM georaster_table WHERE georid =1 OR georid=5 ORDER BY georid; SDO_GEOR.GETCELLVALUE(GEORASTER,0,30,30,'') -------------------------------------------------------------------------------- SDO_NUMBER_ARRAY(88, 136, 35) SDO_NUMBER_ARRAY(0, 0, 0) 2 rows selected. -- This pixel keeps the original values because the cell value -- of the second band is greater than 200. SELECT sdo_geor.getcellvalue(georaster,0,132,116,'') FROM georaster_table WHERE georid =1 OR georid=5 ORDER BY georid; SDO_GEOR.GETCELLVALUE(GEORASTER,0,132,116,'') -------------------------------------------------------------------------------- SDO_NUMBER_ARRAY(242, 225, 233) SDO_NUMBER_ARRAY(242, 225, 233) 2 rows selected. -- This pixel keeps the original values because the cell value -- of the second band is greater than 200. SELECT sdo_geor.getcellvalue(georaster,0,261,185,'') FROM georaster_table WHERE georid =1 OR georid=5 ORDER BY georid; SDO_GEOR.GETCELLVALUE(GEORASTER,0,261,185,'') -------------------------------------------------------------------------------- SDO_NUMBER_ARRAY(255, 214, 2) SDO_NUMBER_ARRAY(255, 214, 2)
例5-5 nodataパラメータを使用した条件付き問合せ
例5-5は、基本的に例5-4と同じですが、すべてのNODATAピクセルで入力GeoRasterオブジェクトからの元の値を出力GeoRasterオブジェクトで維持するように、nodata
パラメータ値が'TRUE'
に設定されています。
DECLARE geor SDO_GEORASTER; geor1 SDO_GEORASTER; BEGIN SELECT georaster INTO geor FROM georaster_table WHERE georid = 1; INSERT into georaster_table values (5, sdo_geor.init('rdt_1', 5)) returning georaster into geor1; sdo_geor_ra.findcells(geor, '{ 1 }>200', null, geor1, null, 'TRUE'); UPDATE georaster_table set georaster = geor1 WHERE georid = 5; COMMIT; END; / SELECT sdo_geor.getcellvalue(georaster,0,30,30,'') FROM georaster_table WHERE georid =1; SDO_GEOR.GETCELLVALUE(GEORASTER,0,30,30,'') -------------------------------------------------------------------------------- SDO_NUMBER_ARRAY(88, 136, 35) 1 row selected. -- This pixel keeps its original cell values because it is nodata, even though -- the cell value of the second band is not greater than 200. SELECT sdo_geor.getcellvalue(georaster,0,30,30,'') FROM georaster_table WHERE georid=5; SDO_GEOR.GETCELLVALUE(GEORASTER,0,30,30,'') -------------------------------------------------------------------------------- SDO_NUMBER_ARRAY(88, 136, 35) 1 row selected.
例5-6 parallelParamを使用した条件付き問合せ
例5-6では、次の条件をすべて満たすすべてのピクセルを検出します。
-
1番目のバンドのセル値が(100,200)の間にあります。
-
2番目のバンドのセル値が[50,250]の間にあります。
-
3番目のバンドのセル値が100を超えます。
また、parallelParam
が'parallel=4'
と指定されているため、例5-6のプロシージャは4つのプロセスを使用してパラレルに実行されます。
DECLARE geor SDO_GEORASTER; geor1 SDO_GEORASTER; BEGIN SELECT georaster INTO geor FROM georaster_table WHERE georid = 2; INSERT into georaster_table values (10, sdo_geor.init('rdt_1', 10)) returning georaster into geor1; sdo_geor_ra.findcells(geor,'({1}>=50)&({1}<=250)&({0}>100)&({0}<200)&{2}>100) ',null,geor1,null,'false','parallel=4'); UPDATE georaster_table SET georaster = geor1 WHERE georid = 10; COMMIT; END; /
親トピック: ラスター代数および分析