ArcGIS と PostGIS ジオメトリ タイプ
PostGIS is a product from Refractions Research that can spatially enable PostgreSQL databases. PostGIS follows the Open Geospatial Consortium, Inc., Simple Features specification for SQL.
ArcGIS で PostGIS ジオメトリ格納タイプを使用するときは、以下のルールに留意してください。
- ジオデータベースで使用する PostgreSQL データベースは、PostGIS データベース テンプレートを使用して作成する必要があります。「PostGIS ジオメトリを使用するためのデータベースの準備」をご参照ください。
- sde ユーザおよびジオデータベースにデータを作成するユーザは、特定の PostGIS テーブルに関する権限を付与されている必要があります。「PostGIS ジオメトリ列を持つテーブルを作成する権限のユーザへの割り当て」をご参照ください。
- 作成するフィーチャクラスは、PostGIS の public.spatial_ref_sys テーブルに列挙されている空間参照だけを使用できます。このテーブルにない空間参照を指定した場合、フィーチャクラスの作成は失敗します。
- PostGIS ジオメトリ タイプを使用するフィーチャクラスを作成するときは、GEOMETRY_STORAGE パラメータを PG_GEOMETRY に設定したコンフィグレーション キーワードを指定する必要があります。
以下では、ArcGIS アプリケーションで PostGIS ジオメトリ格納タイプを使用する方法について詳細に説明します。
PostGIS ジオメトリを使用するためのデータベースの準備
PostGIS ジオメトリ タイプを使用するには、PostGIS をインストールする必要があります。
PostgreSQL をインストールした後、PostGIS をインストールします。
ArcSDE でサポートされているバージョンの PostGIS を入手するには、Windows で PostgreSQL をインストールするときに PostgreSQL のスタックビルダをインストールします。または、PostGIS Web サイト(http://www.postgis.org/download/)または PgFoundry Web サイト(http://pgfoundry.org/)を参照して、ファイルのダウンロード場所を見つけます。必ず、使用するオペレーティング システムに適したインストール ファイルまたはバイナリ ファイルをダウンロードしてください。
Esri のサポート ページにある ArcGIS Server システム要件のページを参照すると、ArcSDE がどのバージョンの PostGIS をサポートしているのかがわかります。
PostGIS をインストールすると、PostGIS テンプレート データベースが PostgreSQL データベース クラスタに作成されます。この PostGIS データベース テンプレートを使用して、ジオデータベースを格納するデータベースを作成します。
Windows の ArcSDE ポスト インストール ウィザードを使用してジオデータベースを作成すると、PostGIS テンプレート以外のテンプレートを使用してデータベースが作成されます。このため、PostGIS ジオメトリ タイプを使用する場合は、インストール後のセットアップの開始前にインストール ウィザードを終了し、手動で PostGIS テンプレートからデータベースを作成し、sde ユーザ、およびデータベース内の sde ユーザ スキーマを作成します。その後、インストール後のセットアップの残りの作業をウィザードを使用して済ませることができます。ポスト インストール ウィザードの最初のダイアログ ボックスで [カスタム] をクリックし、[次へ] をクリックして、[SDE ユーザ環境の定義] をオフにします。
PostGIS ジオメトリ列を持つテーブルを作成する権限のユーザへの割り当て
データベースで PostGIS が有効になると、テーブル(geometry_columns と spatial_ref_sys)が public スキーマに作成されます。少なくとも、geometry_columns テーブルの SELECT、INSERT、UPDATE、DELETE 権限、spatial_ref_sys テーブルの SELECT 権限を、sde ユーザおよびジオデータベースにデータを作成するすべてのユーザに割り当てる必要があります。
GRANT select, insert, update, delete ON TABLE public.geometry_columns TO <user_name>; GRANT select ON TABLE public.spatial_ref_sys TO <user_name>;
PostGIS ジオメトリ格納を使用して PostgreSQL 用の ArcSDE ジオデータベースにフィーチャクラスを作成
データベースで PostGIS ジオメトリの格納が有効になると、ジオメトリ タイプの空間列が含まれた空間対応テーブルを作成できるようになります。ジオグラフィック フィーチャをこの空間列に挿入することができます。
ArcSDE から空間対応テーブルにアクセスするには、ArcGIS ソフトウェアによって提供される既存のツールをアプリケーションで使用するか、ArcSDE の API を使ってアプリケーションを作成します。空間対応テーブルへのアクセスには、SQL の空間関数を呼び出すこともできます。
ArcGIS を使用したフィーチャクラスの作成
ArcGIS を使用して作成されたフィーチャクラスに使われるジオメトリ格納タイプは、sde_dbtune テーブルのパラメータで制御されます。そのパラメータは、GEOMETRY_STORAGE です。PostgreSQL のジオデータベースではパラメータの値を ST_GEOMETRY または PG_GEOMETRY(PostGIS ジオメトリ タイプに対する設定)のいずれかに設定できます。そのため、PostGIS ジオメトリ タイプを使用するフィーチャクラスを ArcGIS で作成するときは、GEOMETRY_STORAGE パラメータを PG_GEOMETRY に設定したコンフィグレーション キーワードを指定する必要があります。
デフォルトでは、ArcSDE for PostgreSQL ジオデータベースの新規フィーチャクラスのジオメトリ格納タイプには、ST_Geometry を使用します。ほとんどのデータを PostGIS 格納タイプで格納する場合は、sde_dbtune テーブルの DEFAULTS キーワードの GEOMETRY_STORAGE パラメータ値を PG_GEOMETRY に変更します(sde_dbtune テーブルのパラメータの変更には sdedbtune コマンドを使用します)。このコマンドを使用する方法については、ArcGIS Server Enterprise に付属している『ArcSDE コマンド リファレンス』をご参照ください。または、フィーチャクラスの一部だけを PostGIS 格納タイプで格納する場合は、フィーチャクラスの作成時に PG_GEOMETRY コンフィグレーション キーワードを指定します。dbtune.sde ファイルでは PG_GEOMETRY キーワードを次のように定義します。
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
残りの格納パラメータは DEFAULTS キーワードから取得されます。sde_dbtune 格納の詳細については、以下のトピックをご参照ください。
既存の PostGIS テーブルの使用
ArcSDE ではテーブルが次の前提条件を満たしている限り、他のアプリケーションや SQL によって外部環境で作成された PostGIS ジオメトリ列が含まれたテーブル(サードパーティ テーブルとも呼ばれます)を使用することができます。
- テーブルを登録するユーザがテーブルの所有者でなければならない。
- ジオメトリ列が 1 つだけ含まれていなければならない。
- 他にユーザ定義タイプの列が含まれていない。
- ジオメトリのタイプが 1 種類でなければならない(ポイント、ライン、またはポリゴン)。ただし、ジオメトリはマルチパートでもよい。
- 登録済みの RowID 列に適した、整数タイプの一意な NOT_NULL の列が含まれていなければならない。
- 空間インデックスを持つ。
SQL を使用して PostGIS 列を持つテーブルを作成する方法については、PostGIS.org Web サイトにある PostGIS のマニュアルをご参照ください。
PostGIS ジオメトリ列が含まれたサードパーティ テーブルの登録
ArcSDE の sdelayer -o register 管理コマンドは、テーブルをフィーチャクラスとして登録します。つまり、そのテーブルに対するレコードが sde_layers、sde_table_registry および sde_geometry_columns システム テーブルに追加されます。sde_column_registry システム テーブルには、テーブルの各列に対するレコードも追加されます。
次に、shape という空間列にポイント ジオメトリ(-e p)が含まれている properties というテーブルを登録する例を示します。このテーブルには fid という整数列があり、SDE が管理する一意なフィーチャ ID 列として使用されます(-C fid,SDE)。
sdelayer –o register –l properties,shape –e p -t PG_GEOMETRY –C fid,SDE -g RTREE -x 30,10,1000 –u <user> –p <pw>
上記のとおり、sdelayer は ArcSDE システム テーブルのみにテーブルを追加します。トポロジ、バージョニング、ネットワークなどの ArcGIS Desktop ジオデータベースの機能を使用可能にするには、テーブルをジオデータベースにも登録する必要があります。詳細については、「ジオデータベースへのテーブルの登録」をご参照ください。
PostGIS ジオメトリ タイプを使用して格納された空間テーブルの名前を変更することはできません。これは、public.geometry_columns テーブルにテーブル名を更新する PostGIS 関数が存在しないためです。
PostGIS および PostgreSQL ドキュメントの検索先
PostGIS のドキュメントは、PostGIS の Web サイト(http://www.postgis.org/documentation/)で参照できます。
PostgreSQL に関する一般的な情報については、PostgreSQL の Web サイト(http://www.postgresql.org/docs/)をご参照ください。