データベースにテーブルを作成する、またはテーブルに列を追加するときに、列のデータ タイプを定義します。データ タイプによって次のことが決定します。
- 列に保存できる値
- その列のデータに対して使用できる操作
- 列のデータをデータベースに保存する方法
ArcGIS では、特定のデータ タイプを操作できます。[データベース接続]、クエリ レイヤー、または Web サービスからデータベース テーブルにアクセスする場合、ArcGIS はサポートされていないデータ タイプを除外します。ArcGIS にはサポートされていないデータ タイプは表示されないため、サポートされていないデータ タイプを ArcGIS から編集することはできません。同様に、ArcGIS を使用してサポートされていないデータ タイプを含むテーブルをデータベース間でコピーして貼り付ける場合、ArcGIS はサポートされているデータ タイプを使用する列のみを貼り付けます。
次のテーブルの最初の列は ArcGIS データ タイプです。2 番目の列は、ArcGIS が作成する PostgreSQL のデータ タイプです。3 番目の列は、ArcGIS 以外で作成したテーブルを表示するときに、ArcGIS データ タイプにマップされるその他の PostgreSQL のデータ タイプ (存在する場合) を示しています。最後の列には、必要に応じて追加情報が表示されています。
ArcGIS データ タイプ | 作成される PostgreSQL のデータ タイプ | 表示可能なその他の PostgreSQL データ タイプ | 備考 |
---|---|---|---|
BLOB | bytea | ||
Date | timestamp without zone | timestamp | |
Double | numeric(p,s) | big serial、double precision | ArcGIS で指定した精度と縮尺が、データベースに作成されるデータ タイプの結果に影響を与える場合があります。「 ArcGIS フィールド データ タイプ」をご参照ください。 |
Float | numeric(p,s) | ArcGIS で指定した精度と縮尺が、データベースに作成されるデータ タイプの結果に影響を与える場合があります。「 ArcGIS フィールド データ タイプ」をご参照ください。 | |
Geometry | ST_Geometry, Geometry (PostGIS), Geography (PostGIS) | ジオデータベースでは、データベースに作成されるデータ タイプは、フィーチャクラスの作成時に使用されるコンフィグレーション キーワードの、GEOMETRY_STORAGE の設定によって決まります。 ST_Geometry をデータベース (ジオデータベースではない) で使用するには、インストールする必要があります。詳細については、「PostgreSQL データベースへの ST_Geometry タイプの追加」をご参照ください。 PostGIS ジオメトリまたはジオグラフィ タイプを使用するには、PostgreSQL データベース クラスター内に PostGIS をインストールし、データベース自体を有効化して PostGIS を使用できるようにする必要があります。詳細については、PostgreSQL のドキュメントをご参照ください。 | |
Global ID | varchar(38) | ジオデータベースでのみサポートされています。 | |
GUID | varchar(38) | UUID | |
Long Integer | 整数 | serial | |
Object ID | ジオデータベースの場合は整数 データベースの場合はシリアル | ArcGIS の ObjectID タイプは、テーブル (またはフィーチャクラス) に登録された RowID 列です。1 つのテーブルにつき、1 つだけ存在します。 | |
ラスター | bytea | ラスターはジオデータベースのみでサポートされます。 | |
SHORT INTEGER | SMALLINT | real | |
Text | character varying | character、varchar、text | SQL クライアントまたはサード パーティ製のアプリケーションを使用してテキスト フィールドを作成する場合に、長さを定義しないと (つまり、長さを 0 にする)、ArcGIS でこのフィールドが CLOB として読み取られます。 |
テーブル内に ArcGIS でサポートされていないデータ タイプの列がある場合、その列をテキストにキャストできます。ただし、これを実行するのは、列内の値を表示したい場合だけにしてください。その列の値で分析を行う必要がある場合は、実行しないでください。たとえば、SELECT ステートメントを実行して、テーブル内の列を選択し、小数の列 (total) をテキストにキャストできます。
SELECT id, name, total::text
FROM me.mydb.tableb;
ジオメトリ データ タイプ
表に示すように、ArcGIS では、Esri ST_Geometry、PostGIS ジオメトリ、PostGIS ジオグラフィという PostgreSQL の 3 種類の空間データ タイプでデータを作成および操作できます。以降の 2 つのセクションでは、これらのデータ タイプの背景について説明します。
ST_Geometry
以下では、ST_Geometry 空間データ タイプの概要について説明します。PostgreSQL の実装に固有の情報については、「PostgreSQL の ST_Geometry」をご参照ください。
ST_Geometry データ タイプはユーザー定義データ タイプ (UDT) の SQL 3 Specification を実装しているため、ランドマークの場所、道路、土地区画といった空間データを格納できる列を作成することができます。これは、ジオデータベースおよびデータベースに対して、 ISO/OGC 準拠の SQL アクセスを提供します。このジオメトリ格納は、地理フィーチャを表すオブジェクト (ポイント、ライン、ポリゴン) の格納を提供することで、データベースの機能を拡張します。このジオメトリ格納は、データベースのリソースを効率よく使用し、レプリケーションやパーティションといったデータベースの機能との互換性を維持し、空間データへの素早いアクセスを可能にします。
ST_Geometry 自体は、インスタンス化されない抽象スーパークラスです。ただし、そのサブクラスはインスタンス化することができます。インスタンス化されたデータ タイプはテーブルの列として定義することができ、その他の値を挿入することができます。
列を ST_Geometry タイプとして定義することはできますが、インスタンス化することができないため ST_Geometry の値は挿入しません。代わりに、サブクラスの値を挿入します。
ST_Geometry のサブクラスは、ベース ジオメトリ サブクラスと同種コレクション サブクラスの 2 つのカテゴリに分類されます。ベース ジオメトリには、ST_Point、ST_LineString、ST_Polygon が含まれ、同種コレクションには、ST_MultiPoint、ST_MultiLineString、ST_MultiPolygon が含まれます。名前が示しているように、同種コレクションはベース ジオメトリのコレクションです。同種コレクションでは、ベース ジオメトリのプロパティを共有することに加えて、独自のプロパティを持つこともできます。
各サブクラスは、その名前が示唆するジオメトリ タイプを格納します。たとえば、ST_MultiPoint はマルチポイントを格納します。以下の表に、サブクラスの一覧とそれらについての説明を示します。
サブタイプ | 説明 |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
各サブクラスは ST_Geometry スーパークラスのプロパティを継承しますが、サブタイプ固有のプロパティもあります。ST_Geometry データ タイプで使用できる関数は、サブクラス エンティティ タイプでも使用できます。ただし、一部の関数はサブクラス レベルで定義されており、特定のサブクラスにしか対応しません。たとえば、ST_GeometryN 関数には、引数として ST_MultiLinestring、ST_MultiPoint、ST_MultiPolygon サブタイプのみを渡すことができます。
PostGIS の空間データ タイプ
PostGIS は、PostgreSQL データベースを空間対応にする製品です。PostGIS では、SQL に対する OGC Simple Features 仕様に従います。ジオメトリの OGC Well-Known Binary (WKB) 表現と OGC Well-Known Text (WKT) 表現を使用します。
PostGIS には、ジオメトリとジオグラフィの 2 つの空間タイプがあります。それらを使用するには、PostgreSQL データベース クラスターに PostGIS をインストールし、PostGIS テンプレート データベースを使用して、ジオデータベースを格納するデータベースを作成する必要があります。インストールする PostGIS のバージョンが、使用する ArcGIS のリリースでサポートされていることを確認します。
ArcGIS で PostGIS 空間格納タイプを使用するときは、以下の点に留意してください。
- ジオデータベースとして使用する PostgreSQL データベースを PostGIS データベース テンプレートを使用して作成するか、データベースで PostGIS を有効化する必要があります。
メモ:
[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ジオプロセシング ツールを使用してジオデータベースを作成する場合、PostGIS テンプレート以外のテンプレートを使用してジオデータベースが作成されます。そのため、PostGIS ジオメトリまたはジオグラフィ タイプを使用する場合は、PostGIS テンプレートを使用してデータベースを手動で作成する必要があります。その後、[エンタープライズ ジオデータベースの作成 (Create Enterprise Geodatabase)] ジオプロセシング ツールを実行するときに既存のデータベースを指定すると、ジオデータベースがこの PostGIS 対応データベースに作成されます。
- sde ユーザーおよびジオデータベースまたはデータベース内の PostGIS データにアクセスするユーザーには、特定の PostGIS ビューに関する権限が付与されている必要があります。
- 作成するフィーチャクラスは、PostGIS の public.spatial_ref_sys ビューに列挙されている空間参照だけを使用できます。ここにない空間参照を指定した場合、フィーチャクラスの作成は失敗します。
- これらの空間データ タイプのいずれかを使用するフィーチャクラスを作成するときは、GEOMETRY_STORAGE パラメーターを PG_GEOMETRY (PostGIS ジオメトリの場合) または PG_GEOGRAPHY (PostGIS ジオグラフィの場合) に設定したコンフィグレーション キーワードを指定する必要があります。
- PostGIS タイプを使用する PostgreSQL のジオデータベースのフィーチャクラスには、CAD および曲線ストレージ (GDB_GEOMATTR_DATA) 用のフィールドが含まれています。ArcGIS の外部で空間テーブルを作成して、そのテーブルをジオデータベースに登録すると、このフィールドがテーブルに追加されます。
- PostGIS ジオグラフィ タイプでは、処理できる形状のサイズが制限されます。詳細については、PostGIS のマニュアルをご参照ください。
PostGIS ジオメトリまたはジオグラフィ列の作成権限の付与
データベースで PostGIS を有効にすると、geometry_columns、geography_columns、spatial_ref_sys という 3 つのビューがパブリック スキーマに追加されます。ジオデータベース内のすべてのユーザー (sde ユーザーを含む) に、geometry_columns、geography_columns、spatial_ref_sys ビューに対する SELECT 権限を付与する必要があります。
GRANT select
ON public.geometry_columns
TO <login_name>;
GRANT select
ON public.geography_columns
TO <login_name>;
GRANT select
ON public.spatial_ref_sys
TO <login_name>;
PostGIS 空間データ タイプを使用するフィーチャクラスの作成
ArcGIS は、コンフィグレーション パラメーター設定を使用して、フィーチャクラスの作成時に使用する空間データ タイプを決定します。そのパラメーターは、GEOMETRY_STORAGE です。PostgreSQL のジオデータベースではパラメーターの値を ST_GEOMETRY、PG_GEOMETRY (PostGIS ジオメトリ タイプに対する設定)、または PG_GEOGRAPHY (PostGIS ジオグラフィ タイプに対する設定) のいずれかに設定できます。したがって、必要な空間データ タイプに設定された GEOMETRY_STORAGE パラメーター (PG_GEOMETRY または PG_GEOGRAPHY) を含むコンフィグレーション キーワードを指定する必要があります。
デフォルトでは、新しいフィーチャクラスは ST_Geometry 格納を使用します。ほとんどのデータを PostGIS 格納タイプで格納する場合は、DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE パラメーター値を変更します または、フィーチャクラスの一部だけを PostGIS 格納タイプで格納する場合は、フィーチャクラスの作成時に PG_GEOMETRY または PG_GEOGRAPHY コンフィグレーション キーワードを指定できます。これらのキーワードをジオデータベースからエクスポートすると、次のように表示されます。
##PG_GEOMETRY GEOMETRY_STORAGE "PG_GEOMETRY" UI_TEXT "User Interface text description for POSTGIS geometry storage" END
##PG_GEOGRAPHY GEOMETRY_STORAGE "PG_GEOGRAPHY" UI_TEXT "User Interface text description for POSTGIS geography storage" END
残りの格納パラメーターは DEFAULTS キーワードから取得されます。コンフィグレーション パラメーターの詳細については、「PostgreSQL コンフィグレーション パラメーター」をご参照ください。
既存のジオメトリまたはジオグラフィ テーブルの使用
ArcGIS ではテーブルが次の前提条件を満たしている限り、他のアプリケーションや SQL によって外部環境で作成された PostGIS ジオメトリ列またはジオグラフィ列が含まれたテーブル (サードパーティ テーブルとも呼ばれます) を使用することができます。
- 空間列が 1 つだけ含まれていなければならない。含まれていない場合は、空間列を 1 つだけ含むクエリ レイヤーまたはビューを定義する。
- 他にユーザー定義タイプの列が含まれていない。
- フィーチャのタイプが 1 種類でなければならない (ポイント、ライン、またはポリゴン)。ただし、フィーチャのタイプはマルチパートでもよい。
- Object ID 列に適した、整数タイプの一意な NOT_NULL の列が含まれていなければならない。
- 空間インデックスを持つ。
SQL を使用して PostGIS 列を持つテーブルを作成する方法については、PostGIS の FAQ (英文) をご参照ください。
ArcGIS Desktop から PostgreSQL データベースに接続して、PostGIS の列を含むテーブルをジオデータベースに登録することができます。詳細については、「ジオデータベースへのテーブルまたはビューの登録」をご参照ください。