3.5 ラスター・データのロード
イメージまたはラスター・データをロードおよびエクスポートする場合、サード・パーティのETLツールを検討できます(「GeoRasterツール: ローダー、ビューア、エクスポータ」の「ノート」を参照)。たとえば、gdal_translateコマンドラインおよびOracle Spatial GeoRasterドライバを通じてGeoRasterを完全にサポートする他のGDALユーティリティを使用できます。
また、GeoRasterの機能を使用してラスター・データをロードできます。GeoRasterを使用する場合、次のオプションがあります。
-
GDALベースのETLツールを使用して、GDALでサポートされている形式で大量のイメージの同時バッチ・ロードおよびエクスポートを実行できます。このツールについては、「同時バッチ・ロードおよびエクスポートのためのGDALベースのETLウィザード」を参照してください。
-
PL/SQLでSDO_GEOR_GDAL.translateプロシージャをコールし(非自律型データベースの場合のみ)、イメージをGeoRasterオブジェクトにロードします。
-
GeoRasterのJAIベースのローダー・ツールまたはビューア・ツールを使用します(「JAIベースのビューア、ローダーおよびエクスポータ」を参照)。
イメージおよびラスター・ファイルをロードおよびエクスポートするには、GDAL、GDALベースのETLおよびSDO_GEOR_GDAL.translateを使用することをお薦めします。最後のオプション(JAIベースのツール)では、次のことを実行できます。
-
ラスター・データを圧縮し、データをJPEG圧縮またはDEFLATE圧縮されたGeoRasterオブジェクトに保存します。
-
ESRIワールド・ファイルまたはDigital Globe RPCテキスト・ファイル(.rpb)を既存のGeoRasterオブジェクトにロードし、リロードせずにラスター・データを地理参照します。ワールド・ファイルでSRIDを指定し、データの空間エクステントを生成することもできます。
-
ラスター・データの有無にかかわらず、地理参照とともにGeoTIFF形式のファイルをロードします。GeoTIFFイメージの地理参照情報をロードおよびエクスポートするには、GeoTIFFライブラリが必要です。手順については、「GeoRasterオブジェクトの地理参照」を参照してください。
GeoRasterオブジェクトにラスター・データをロードしたら、SDO_GEOR.validateGeoRasterファンクションをコールしてそのオブジェクトが有効であることを確認する必要があります(「GeoRasterオブジェクトの検証」を参照)。
ESRIワールド・ファイルまたは.rpb
ファイルには座標系の情報が含まれていないため、ロード操作用に座標参照システムのSRID値を指定することができます。ただし、SRIDを指定しない場合は、ローダーによりGeoRasterオブジェクトのモデルSRIDが0(ゼロ)に設定されます。これは、GeoRasterオブジェクトが無効であり、そのため、SDO_GEOR.setModelSRIDプロシージャを使用してこのオブジェクトに有効なモデル空間を指定する必要があることを意味します。モデル空間の座標系が不明である場合は、SRIDの値を999999に指定できます。これは、座標参照システムが不明であることを意味します。(具体的には、SRID 999999はunknown CRS
という座標参照システムに関連付けられます。)モデル空間の実際の座標参照システムがわかった後で、それに応じてSRID値をリセットできます。
unknown CRS
(SRID 999999)の座標参照システムの詳細は、『Oracle Spatial開発者ガイド』を参照してください。
親トピック: GeoRasterのデータベース作成および管理
3.5.1 ブロック化および最適な埋込みを使用したロード
JPEGまたはJPEG2000イメージをロードし、変更せずに格納しないかぎり、イメージまたはラスター・ファイルをGeoRasterオブジェクトにロードする場合、ファイル形式によってブロック化方法は大きく異なる可能性があるため、常にデータの適切なブロック化を考慮して適用してください。一般的に、ブロック化サイズは512x512以上である必要があります。ブロック化サイズに絶対的なルールはありませんが、ラスターが大きくなるほど、使用する可能性のあるブロック化サイズも大きくなります。通常のラスターの場合、512x512から2048x2048が適切です。非常に小さいイメージ(1024x1024x3未満)の場合、通常はブロック化なしが適切な選択です。小さすぎたり(64x64、128x128など)、大きすぎるブロック化サイズや、1ブロック当たりのピクセル数が0.5 (2分の1)、1、8行などの極端なブロック化サイズは避けてください。通常、ブロックの矩形は、正方形または正方形に近い形にする必要があります。異なるアプリケーションごとに、効率的な記憶域と最適なパフォーマンスのバランスを取るようにブロック化を調整できます。
また、必ず、ロード中に最適な埋込みを適用する必要があります。つまり、blocking=OPTIMALPADDING
を指定します(blocksize
を指定する以外)。GeoRasterでは、ブロックの右側の列および下側の行に埋込みを適用して、他のブロックと同じサイズになるようにします。特定のラスターのブロック・サイズが最適でない場合、デフォルトの埋込み結果により、一部の記憶域を消費する可能性があります。blocking=OPTIMALPADDING
を指定する場合、すべてのGeoRasterプロシージャおよびETLツールでは、GeoRasterオブジェクト記憶域の埋込み量を削減するよう最適化するために、GeoRaster次元サイズ配列を自動的に調整します。調整は、常にユーザー指定の値を基準に行われます。SDO_GEOR_UTL.calcOptimizedBlockSizeプロシージャの使用上のノートで表のblocking
キーワードの説明を参照してください。
GDALコマンドラインを使用する場合の最適な埋込みの適用方法は、次の例を参照してください。
gdal_translate -of georaster /images/image_1.tif \
georaster:georaster/georaster@my_db, image_table, raster \
-co "insert=(id,label,raster) values (1, 'image_1', sdo_geor.init('rdt_table', 1)" \
-co blockxsize= 512 \
-co blockysize=512 \
-co blockbsize=3 \
-co blocking=optimalpadding \
-co interleave=BIP
親トピック: ラスター・データのロード
3.5.2 解凍しないJPEGおよびJPEG 2000イメージのロード
GeoRasterでは、GeoRasterブロックがJPEGファイルとして格納されるJPEG圧縮をサポートします。また、GeoRasterでは、GeoRasterで単一のブロックをJPEG 2000ファイルとして格納するJPEG 2000圧縮もサポートします。解凍および再圧縮しないでJPEGまたはJPEG 2000イメージをロードおよびエクスポートしてパフォーマンスを大幅に向上できる特殊な場合があります。
JPEGにおいて、イメージ・ファイルがJPEGファイルで、1つまたは3つのバンドがある場合、JAIベースのGeoRasterローダーを使用して解凍および再圧縮せずに直接イメージをロードできます。GeoRasterオブジェクトの圧縮タイプはJPEG-Fとして指定され、GeoRasterオブジェクトの記憶域にブロック化は指定されません(つまり、GeoRasterオブジェクトには1つのブロックのみ含まれます)。
JPEG 2000において、イメージ・ファイルがJPEG2000ファイルの場合および使用中のパラメータがJPEG 2000ファイルの内部構造の変更を要求しない場合、GDALまたはGDALベースのGeoRaster ETLツールを使用して解凍および再圧縮せずに直接イメージをロードできます。たとえば、次のスクリプトは、解凍せずにJPEG 2000ファイルを直接ロードします。
gdal_translate -of georaster /images/image_3.jp2 \
georaster:georaster/georaster@my_db,image_table,raster \
-co "insert=(id,label,raster) values (3, 'image_3', sdo_geor.init('rdt_table', 3)" \
-co compress=jp2-f
ただし、使用中のパラメータのいずれかがJPEG 2000データの内部構造の変更を要求する場合、直接ロードできません。次の例では解凍および再圧縮を要求するため、ロード時間が大幅に増加します。
gdal_translate -of georaster /images/image_4.jp2 \
georaster:georaster/georaster@my_db,image_table,raster \
-co "insert=(id,label,raster) values (4, 'image_4', sdo_geor.init('rdt_table', 4)" \
-co compress=jp2-f \
-co blockxsize=1024 \
-co blockysize=1024 \
-srcwin 100 200 1000 1000 \
-outsize 50% 50%
親トピック: ラスター・データのロード
3.5.3 ロード前のソース・ラスターの再フォーマット
GeoRasterのJAIベースのローダーでは、BSQインターリーブ形式のソース・ラスター・ファイルがサポートされないため、ファイルが大きすぎるとメモリー不足のエラーが発生する可能性があります。また、その他の制限も適用される場合があります。このような問題を回避するには、ソース・ファイルが適切にロードされるようにソース・ファイルを再フォーマットおよび再ブロック化します。ただし、次の方法を検討する前に、通常このような問題および要件がない、GDALまたはGDALベースETLローダーを使用することをお薦めします。
たとえば、この操作を行う方法の1つに、GDALの使用があります(GDALは、http://www.gdal.org
から入手できるオープン・ソースのラスター変換ライブラリであり、JAI (Java Advanced Imaging)で処理するためにイメージ・ファイルやラスター・ファイルを再フォーマットまたは再ブロック化できます)。GDALは、GeoRasterをネイティブにサポートし、GeoRasterオブジェクトを直接インポートおよびエクスポートでき、また、GeoRasterオブジェクトを処理できます(詳細は、http://www.oracle.com/technetwork/database/enterprise-edition/getting-started-with-gdal-133874.pdf
を参照してください)。また、GDALを使用してTFWファイルを生成することもできます。たとえば、GDALコマンドラインまたは(一括変換の場合は)シェルを使用して、それぞれ単一行で次の2つのようなコマンドを実行します。
gdal_translate -of GTiff -co "TFW=YES" -co "INTERLEAVE=PIXEL" -co "TILED=YES" D:\my_image.tif D:\my_new_image.tif gdal_translate -of GTiff -co "TILED=YES" -co "TFW=YES" D:\my_image.ecw D:\my_new_image.tif
前述の例で、最初のコマンドはTFWファイルを生成し、インターリーブを(JAIでサポートされる)BIPに変更して、イメージを256x256に再ブロック化します。2つ目のコマンドは、ECWをTIFFに変換し、TFWを生成してイメージを再ブロック化します。
その後、GeoRasterローダー・ツール(「GeoRasterツール: ローダー、ビューア、エクスポータ」を参照)を使用して再ブロック化を指定し、イメージを適切にロードして、後でデータベースから効率的に取得できるようにします。次に、単一コマンドの例を示します。
java -Xmx1024m oracle.spatial.georaster.tools.GeoRasterLoader mymachine db11 6521 georaster georaster thin 32 T globe image "blocking=true, blocksize=(512,512,3)" "D:my_image.tif,2,RDT_15, D:\my_image.tfw,82213"
極端に大きいイメージの場合、GDALを使用して、そのイメージをより小さいサイズ(JAIで処理できるサイズ)の複数のイメージ・ファイルにタイル処理することや、GDALを使用してそのイメージを直接ロードおよびエクスポートすることも可能です。
親トピック: ラスター・データのロード