6.15 バンドのマージ

イメージ分類、時系列分析およびラスターGISモデリングでは、状況により、異なるGeoRasterオブジェクトの複数のバンドまたはレイヤーをマージして1つのGeoRasterオブジェクトにする必要があります。

この操作は、GeoRasterでバンドまたはレイヤーのマージと呼ばれ、SDO_GEOR.mergeLayersプロシージャまたはSDO_GEOR_RA.rasterMathOpプロシージャを使用して実行できます。ソースGeoRasterオブジェクトの指定したバンドをターゲットGeoRasterオブジェクトに追加するか、2つのGeoRasterオブジェクトの異なるバンドを1つの新しいGeoRasterオブジェクトにマージできます。このマージや追加を反復実行することで、無制限の数のバンドを1つのGeoRasterオブジェクトにマージできます。

例6-16 バンドのマージ

例6-16に、2つの例を示します。最初の例では、8つのGeoRasterオブジェクトがあり、そのそれぞれにGeoTIFF形式の単一バンド・ランドサットETM+イメージ・ファイルからロードされたただ1つのバンドが含まれると仮定します。各GeoRasterオブジェクトのバンドの数は、そのGeoRasterオブジェクトのGEORID列の値と同じです。例では、すべてのバンドを1つのGeoRasterオブジェクトにマージして、完全なETM+シーンを作成します。

DECLARE
    gr1 sdo_georaster;
BEGIN
    select georaster into gr1 from georaster_table where georid = 1 for update;
    for rec in (select georaster from georaster_table 
                     where georid >= 2 and georid <= 8 
                     order by georid)
    loop
       sdo_geor.mergelayers(gr1, rec.georaster);
    end loop;
    update georaster_table set georaster = gr1 where georid = 1;
    commit;
END;
/

2番目の例では、8つのGeoRasterオブジェクトがあり、そのそれぞれに3つのバンドが含まれると仮定します。例では、各GeoRasterオブジェクトから1つのバンドを選択し、パラレルに単一の8つのバンドのGeoRasterオブジェクトにマージします。

DECLARE
  geor       SDO_GEORASTER;
  geo_array  SDO_GEORASTER_ARRAY;
BEGIN
  SELECT georaster INTO geor FROM georaster_table WHERE georid = 0 for update;
  geo_array:=SDO_GEORASTER_ARRAY();
  for rec in (select georaster from georaster_table 
                     where georid >= 1 and georid <= 8 
                     order by georid)
  loop
     geo_array.extend(1);
     geo_array(geo_array.last):=rec.georaster;
  end loop;
  sdo_geor_ra.rasterMathOp(geo_array,SDO_STRING2_ARRAY('{0,0}','{1,1}','{2,2}','{3,0}','{4,1}','{5,2}','{6,0}','{7,1}',),null,geor,'false',null,'parallel=4');
  UPDATE georaster_table SET georaster = geor WHERE georid = 0;
  COMMIT;
END;
/