5.9 ラスター・データのキャスト
ラスター・データのキャストによって、あるデータ型から別のデータ型にセル値がマップされます。
GeoRasterには、2つのタイプのキャスト操作があり、一方では操作のstorageParam
パラメータでcellDepth
キーワードを使用し、他方ではGeoRasterラスター代数のcastingExpr
操作を使用します。(castingExpr
はarithmeticExpr
操作の1つです(「ラスター代数言語」を参照))。
ラスター・データの結果を新しいGeoRasterオブジェクトに格納する操作を適用するたびに、その操作のstorageParam
パラメータでcellDepth
キーワードを使用できます。(cellDepth
キーワードとその値については、表1-1を参照してください。)cellDepth
が指定されている場合、ターゲットGeoRasterオブジェクトがそのcellDepth
値を使用して作成され、ラスター・セル・データは自動的にその格納用のcellDepth
値にキャストされます。ソース・データがセル深度の下限で、結果のデータがセル深度の上限である場合、storageParam
パラメータでcellDepth
を直接使用してキャストを実行できます。この場合、キャストは透過的で高速です。
ただし、セル深度の上限のデータに対してセル深度の下限を指定すると、storageParam
パラメータでcellDepth
キーワードを使用してセル深度を変更した場合にデータの消失または変更が発生し、精度や品質が低下する可能性があります。精度と確度を詳細に制御するには、ラスター代数のキャスト演算子のcastingExpr
を使用します。
たとえば、32BIT_REAL
のセル深度を持つラスターがあり、値の範囲が[0.0, 100.0]であると仮定します。例5-23を使用して、10の異なるクラスへのラスターの線形セグメント化を実行できます(それぞれが、castint
演算子の使用によって、10の倍数のセル値(0, 10, 20, …, 90)を持ちます)。この操作によって、すべてのセル値が、最も近い小さい方の10の倍数にキャストされます(たとえば、60から69のすべての数は、60にキャストされます)。
例5-23 ラスターの線形セグメント化
DECLARE geor1 SDO_GEORASTER; geor2 SDO_GEORASTER; BEGIN --Source georaster object with cell value range [0.0,100.0) select georaster into geor1 from georaster_table where georid = 1; --Target georaster object to store the output layer select georaster into geor2 from georaster_table where georid = 2 for update; --Linearly segment the source raster into 10 classes and store in 8BIT cell depth sdo_geor_ra.rasterMathOp(geor1, SDO_STRING2_ARRAY('(castint({0}/10)*10'), 'celldepth=8BIT', geor2); --Commit changes to the output georaster object update georaster_table set georaster = geor2 where georid = 2; commit; END; /
例5-23に示すとおり、storageParam
パラメータでのcellDepth
キーワードの使用とラスター代数のキャスト演算子を組み合せることで、適切で簡潔な方法で結果を正しく計算して格納できます。例5-23で、出力セル値は90以下の整数であるため、結果のラスターは(32BIT_REAL
のかわりに)記憶域を節約できる8BIT
のセル深度を使用して格納できます。
親トピック: ラスター代数および分析