5.9 ラスター・データのキャスト

ラスター・データのキャストによって、あるデータ型から別のデータ型にセル値がマップされます。

GeoRasterには、2つのタイプのキャスト操作があり、一方では操作のstorageParamパラメータでcellDepthキーワードを使用し、他方ではGeoRasterラスター代数のcastingExpr操作を使用します。(castingExprarithmeticExpr操作の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のセル深度を使用して格納できます。