ワークフロー: SQL を使用したラスタ カタログの作成
ラスタ カタログは空間が設定されたラスタ データセットを格納する ArcObjects コンポーネントです。このトピックに記載のワークフローに従うと、ST_Raster タイプを使用して SQL 内でラスタ カタログを作成し、データを投入することができます。
以下の各セクションには、各データベース管理システムでのラスタ カタログ作成タスクの実施例が記載されています。これらの例は、ご自分のデータに合わせて修正してください。
ST_Raster 列を持つテーブルの作成
- Oracle の SQL*Plus、PostgreSQL の pgSQL や pgAdminIII といった SQL エディタ、または SQL Server の Microsoft Management Studio の [クエリ エディタ] ウィンドウを表示します。
-
CREATE TABLE ステートメントで、ST_Raster 列と string 列を持つテーブルを作成します。
以下の例では、urban_area というテーブルを作成します。このテーブルには name と raster という 2 つの列が含まれています。
Oracle
CREATE TABLE urban_area (name varchar2(255), sde.st_raster raster);
PostgreSQL
CREATE TABLE urban_area (name varchar(255), sde.st_raster raster);
SQL Server
CREATE TABLE urban_area (name varchar(255), dbo.st_raster raster);
ラスタ値を格納するための ST_Raster 列の初期化
ST_Raster_Util の Initialize 関数を使って、ST_Raster 列を初期化します。この関数によって、ArcSDE ラスタ メタデータ テーブルにラスタ列の参照が追加され、ラスタ ブロック テーブル、ラスタ補助テーブル、およびラスタ列の挿入、更新、削除トリガが作成されます。この関数が実行されると、ラスタ列が ArcSDE に登録され、ラスタ列の機能が利用可能になります。これにより、table_registry、column_registry、raster_columns system の各システム テーブルにレコードが追加されます。ただし、ジオデータベースへの登録が完了するまで、ArcGIS ラスタ カタログ オブジェクトとしてデータにアクセスすることはできません。
-
ST_Raster でユーティリティを初期化し、urban_area テーブルの ST_Raster 列を初期化します。
Oracle
BEGIN SDE.ST_RASTER_UTIL.INITIALIZE ('urban_area','raster',4326,'defaults'); END; /
PostgreSQL
SELECT st_raster_util_initialize ('urban_area','raster',4326,'DEFAULTS');
SQL Server
EXEC ST_Raster_Util.Initialize 'sde','bobby','urban_area','raster',4326,NULL,'DEFAULTS'
ST_Raster 列へのラスタ値の挿入
INSERT ステートメントを使用すると、テーブルに列を追加できます。
以下の例では、name 列に「MILWAUKEE」という文字列が投入され、ST_Raster コンストラクタによって GeoTIFF ファイルが ST_Raster タイプに変換されます。
-
SQL INSERT ステートメントで ST_Raster 列に画像を挿入します。milwakee.tif の代わりにお手持ちの TIFF ファイルを使用してください。
Oracle
INSERT INTO URBAN_AREA ('MILWAUKEE',SDE.ST_RASTER('C:\milwaukee.tif')); COMMIT;
PostgreSQL
INSERT INTO urban_area ('milwaukee',sde.st_raster('C:\milwaukee.tif'));
SQL Server
INSERT INTO urban_area ('milwaukee',dbo.ST_Raster::construct('C:\milwaukee.tif'));
注意:データベースとファイルが格納されているサーバにおいて、TIFF ファイル用に指定したパスが有効であることを確認してください。
-
既存のラスタ列にモザイク化する場合は、SQL UPDATE ステートメントを使用します。
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.MOSAIC('C:\milwaukee2.tif') WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = mosaic(RASTER,'C:\milwaukee2.tif') WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.mosaic('C:\milwaukee2.tif') WHERE name = 'milwaukee';
ピラミッドの構築
ソース データを読み込んだら、ST_Raster buildPyramid 関数でピラミッドを構築します。ピラミッドは、すべてのラスタ値について構築するか、ピラミッドの構築対象とするラスタ値を WHERE 句で限定します。
すべてのピラミッドは、共一次内挿法ピラミッドとして構築されます。
-
buildPyramid 関数を使用します。
以下の例では、どのラスタ値のピラミッドを最近隣内挿法または共一次内挿法で構築する必要があるのかを指定するために WHERE 句が指定されています。
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('nearest,level=-1') WHERE NAME = 'MILWAUKEE'; COMMIT; UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDPYRAMID('bilinear,level=-1') WHERE NAME = 'TOKYO'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildpyramid(raster,'nearest,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = buildpyramid(raster,'bilinear,level=-1') WHERE name = 'tokyo';
SQL Server
UPDATE urban_area SET raster = raster.buildPyramid('bilinear,level=-1') WHERE name = 'milwaukee'; UPDATE urban_area SET raster = raster.buildPyramid('nearest,level=-1') WHERE name = 'tokyo';
ラスタに対する統計情報の構築
ラスタ データによっては、識別可能にするために表示レンダラでストレッチしなければならないものがあります。この操作をしないと、ラスタ データが黒、灰色、または白で表示されます。この種のデータについては、ラスタ統計情報を構築する必要があります。これは、UPDATE ステートメントで ST_Raster buildStats 関数を使って行います。
統計情報の構築が必要なテーブルの行を指定する必要がある場合は、WHERE 句を使用します。
-
SQL UPDATE ステートメントで buildStats 関数を使用します。
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS() WHERE NAME = 'MILWAUKEE'; COMMIT;
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = raster.buildStats(NULL) WHERE name = 'milwaukee';
デフォルトでは、最も正確な統計結果となるよう、統計情報がラスタ値の基底レベルで計算されます。ただし、特定のピラミッド レベルで統計情報を計算することで、精度を犠牲にして時間を節約することもできます。使用するピラミッド レベルが高いほど、統計情報の計算が高速になりますが、統計情報の精度が犠牲になります。当然のこととして、統計情報を計算する前に、指定するレベルまでピラミッドを構築しておく必要があります。
-
統計情報を構築するレベルを buildStats 関数で指定します。
以下の例では、統計情報が第 6 のピラミッド レベルで計算されます。
ヒント:レベルを指定しない場合のデフォルトは基底レベルです。また、基底レベルは値 0 で指定することもできます。
Oracle
UPDATE URBAN_AREA T SET RASTER = T.RASTER.BUILDSTATS(6) WHERE NAME = 'MILWAUKEE';
PostgreSQL
UPDATE urban_area SET raster = buildstats(raster,6) WHERE name = 'milwaukee';
SQL Server
UPDATE urban_area SET raster = buildStats.raster(6) WHERE name = 'milwaukee';
ジオデータベースへのテーブルの登録
空間参照が設定された 1 つのラスタ列が含まれた、ArcSDE に登録済みのテーブルは、ArcObjects ラスタ カタログに変換することができます。ST_Raster_Util Initialize 関数を使用すれば ArcSDE にラスタ列を登録できます。この関数の実行後には、テーブルをジオデータベースに登録することができ、これによりテーブルがラスタ カタログに変換されます。このワークフローの例では、ラスタ列がすでに初期化されているので、ジオデータベースに登録することができます。
ArcGIS Desktop でジオデータベースにテーブルを登録します。これによりラスタ カタログが作成されます。
- ArcMap を起動してカタログ ウィンドウを表示するか、ArcCatalog を起動します。
-
urban_area テーブルが格納されたジオデータベースに接続します。
ジオデータベースには、カタログ ツリーの [データベース コネクション] ノードの下で接続できます。ジオデータベースへのログインは必ず urban_area テーブルの所有者として行ってください。
- urban_area テーブルを右クリックし、[ジオデータベースに登録] をクリックします。
-
テーブルに ObjectID 列が追加されることを警告するダイアログ ボックスが表示されたら、[はい] をクリックします。
ジオデータベースでは、NULL ではないこの一意な ObjectID 列を必要とします。
テーブルのアイコンがラスタ カタログのアイコンに変わり、テーブルがラスタ カタログに変換されたことが示されます。
データベース統計情報の更新
ArcSDE は、最適なパフォーマンスを得るため、DBMS のコスト ベース オプティマイザを使用して、実行された更新やクエリに適切な実行プランを選択します。一方で、コスト ベース オプティマイザは、DBMS の最新の統計情報を使用して最善の実行プランを選択しています。
データの DBMS 統計情報を更新する最も簡単な方法は、ArcCatalog のグラフィカル ユーザ インタフェースを使用する方法です。ArcGIS Desktop の [解析] コマンドを使用して統計情報を更新します。
- カタログ ツリーの [データベース コネクション] ノードにあるジオデータベースの urban_areas ラスタ カタログを右クリックします。
- [統計情報の更新] をクリックします。
- [ラスタ テーブル] チェックボックスと [ビジネス テーブル] チェックボックスをオンにします。
- [OK] をクリックします。