ワークフロー: 既存の ST_Raster 値へのラスタ データのモザイク
ラスタを既存の ST_Raster 値にモザイクする場合は、SQL の UPDATE ステートメントにおいて ST_Raster モザイク関数を使用できます。ラスタを既存の値にモザイクする場合の入力としては、画像ファイル、複数の画像が含まれた 1 つのフォルダ、または別の ST_Raster 列から抽出した値を使用できます。
ただし、ラスタを既存の値にモザイクする前に、既存の ST_Raster 値にカラー マップが適用されている場合は、これを削除する必要があります。モザイクの操作が完了したら、カラー マップをもう一度 ST_Raster 値に適用することができます。
このトピックの例では、urban_area テーブルの特定のレコードからカラー マップを削除し、ラスタをこれらのレコードのラスタ値に追加してから、カラー マップを再適用する方法を示しています。
カラー マップの削除
ST_Raster 値からカラー マップを削除する場合は、ST_Raster deleteColormap 関数を使用します。
この操作は、追加のラスタを特定のテーブルのラスタ値にモザイクする前に行う必要があります。
-
deleteColormap 関数と UPDATE SQL ステートメントを使用して、urban_area テーブルの、name の値が ALL_CITIES である行のラスタ値からカラー マップを削除します。
Oracle
UPDATE URBAN_AREA t SET RASTER = t.raster.deleteColormap() WHERE NAME = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = deleteColormap(raster) WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = deleteColormap() WHERE name = 'all_cities';
deleteColormap の実施に成功したら、ラスタ値がカラー マップ値ではなくグレースケールで描画されます。
既存の ST_Raster 値へのモザイクによるラスタ データの追加
モザイクの操作では、ラスタ データが既存のラスタ値に反復的に追加されます。このため、ラスタ値が数テラバイトを上回るまでに増加することもあります。ラスタ値は、DBMS(データベース管理システム)の記憶容量による制限しか受けません。
例 1: フォルダ内のすべてのラスタの ST_Raster 列への挿入
SQL の UPDATE ステートメントでモザイク関数の再帰オプションを使用すれば、指定フォルダを繰り返しスキャンして指定ファイル タイプを検索するようにできます。以下の例では、拡張子が「.tif」のすべてのファイルを特定するよう、cities フォルダが再帰的に検索されます。そのうえで、これらのファイルは urban_area テーブルにある all_cities として識別されるラスタ値にモザイクされます。
-
モザイク関数と再帰オプションを使って、指定フォルダにあるすべての *.tif ファイルを既存の ST_Raster 値にモザイクします。
Oracle
UPDATE URBAN_AREA t SET RASTER = t.raster.mosaic('E:\cities\*.tif', 'recursive,log=E:\log.txt') WHERE NAME = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = mosaic(image,'E:\data\*.tif', 'recursive,log=E:\log.txt') WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = raster.mosaic('E:\data\*.tif',NULL, 'recursive,log=E:\log.txt') WHERE name = 'all_cities';
例 2: ST_PixelData の抽出と ST_Raster 列への追加
japan テーブルで name 列の値が tokyo であるラスタ列のピクセルのピラミッドの第 1 レベルを、name 列の値が all_cities である urban_area テーブルのラスタ列にモザイクします。この場合、ST_Raster getPixelData 関数によって、ST_PixelData 値が ST_Raster 値から data と呼ばれる定義済みの ST_PixelData 変数に抽出されます。次に、この変数は ST_Raster コンストラクタに渡され、ST_Raster 形式に変換し直されます。
-
getPixelData 関数で japan テーブルの ST_Raster 値から ST_PixelData 値を抽出し、これを urban_area テーブルのラスタ値に挿入します。
Oracle
DECLARE data ST_PIXELDATA; BEGIN SELECT t.raster.getPixelData('level=1') INTO data FROM JAPAN t WHERE NAME = 'TOKYO'; UPDATE URBAN_AREA t SET image = t.raster.mosaic(data,'log=E:\log.txt') WHERE NAME = 'ALL_CITIES'; END; /
PostgreSQL
DROP FUNCTION IF EXISTS mosaic_from_pixeldata(); CREATE OR REPLACE FUNCTION mosaic_from_pixeldata() RETURNS integer AS ' DECLARE data sde.st_pixeldata; BEGIN SELECT getPixelData(image) INTO data FROM japan WHERE name = 'tokyo'; UPDATE urban_area SET raster = mosaic(raster,data,''log=E:\log.txt'') WHERE name = ''all_cities''; END;' LANGUAGE plpgsql; SELECT mosaic_from_pixeldata(); DROP FUNCTION IF EXISTS mosaic_from_pixeldata();
SQL Server
DECLARE @data ST_PIXELDATA; SET @data = (SELECT raster.getPixelData('level=1') FROM japan WHERE name = 'tokyo'); UPDATE urban_area SET raster = raster.mosaic(NULL,@data,'log=E:\log.txt');
更新された ST_Raster 値へのカラー マップの適用
ST_Raster 値の更新が完了したら、ラスタ値の表示に使用される色を定義したカラー マップを再適用できます。ラスタへのカラー マップの再適用には、setColormap 関数を使用します。
setColormap 関数の入力は TIFF 画像でなければなりません。以下の例では、citycolors.tif ファイルのカラー マップを使って、urban_area テーブルで name の値が all_cities であるすべての行のラスタ値にカラー マップが追加されます。
-
UPDATE SQL ステートメントと citycolors.tif 入力画像ファイルを使って、name 値が all_cities である urban_area テーブルのレコードにカラー マップを追加します。
Oracle
UPDATE URBAN_AREA t SET raster = t.raster.setColormap('/net/gis/gis1/citycolors.tif') WHERE name = 'ALL_CITIES';
PostgreSQL
UPDATE urban_area SET raster = setColormap(raster,'/net/gis/gis1/citycolors.tif') WHERE name = 'all_cities';
SQL Server
UPDATE urban_area SET raster = raster.setColormap('/net/gis/gis1/citycolors.tif') WHERE name = 'all_cities';