データベースにテーブルを作成する、またはテーブルに列を追加するときに、列のデータ タイプを定義します。 データ タイプによって次のことが決定します。
- 列に保存できる値
- その列のデータに対して使用できる操作
- 列のデータをデータベースに保存する方法
ArcGIS では、特定のデータ タイプを操作できます。 [データベース接続]、クエリ レイヤー、または Web サービスからデータベース テーブルにアクセスする場合、ArcGIS はサポートされていないデータ タイプを除外します。 ArcGIS にはサポートされていないデータ タイプは表示されないため、サポートされていないデータ タイプを ArcGIS から編集することはできません。 同様に、ArcGIS を使用してサポートされていないデータ タイプを含むテーブルをデータベース間でコピーして貼り付ける場合、ArcGIS はサポートされているデータ タイプを使用する列のみを貼り付けます。
次のテーブルの最初の列は ArcGIS データ タイプです。 2 番目の列は、ArcGIS が作成する PostgreSQL のデータ タイプです。 3 番目の列は、ArcGIS 以外で作成した (ジオデータベースに登録されていない) テーブルを表示するときに、ArcGIS データ タイプにマップされるその他の PostgreSQL のデータ タイプ (存在する場合) を示しています。 最後の列には、必要に応じて追加情報が表示されています。
ArcGIS のデータ タイプ | 作成される PostgreSQL のデータ タイプ | 表示可能なその他の PostgreSQL データ タイプ | 備考 |
---|---|---|---|
Big Integer | bigint | ||
Blob | bytea | ||
Date | timestamp without time zone | timestamp with time zone | |
Date Only | date | ||
Double | numeric(p,s) | 倍精度 | ArcGIS で指定した精度 (p) と縮尺 (s) が、データベースに作成されるデータ タイプの結果に影響を与える場合があります。 詳細は、「ArcGIS フィールド データ タイプ」をご参照ください。 |
Float | numeric(p,s) | decimal、double precision、numeric、real | ArcGIS で指定した精度 (p) と縮尺 (s) が、データベースに作成されるデータ タイプの結果に影響を与える場合があります。 詳細は、「ArcGIS フィールド データ タイプ」をご参照ください。 |
ジオメトリ | ST_Geometry, Geometry (PostGIS), Geography (PostGIS) | ジオデータベースでは、データベースに作成されるデータ タイプは、フィーチャクラスの作成時に使用されるコンフィグレーション キーワードの、GEOMETRY_STORAGE の設定によって決まります。 ST_Geometry をデータベース (ジオデータベースではない) で使用するには、インストールする必要があります。 詳細については、「PostgreSQL データベースへの ST_Geometry タイプの追加」をご参照ください。 PostGIS ジオメトリまたはジオグラフィ タイプを使用するには、PostgreSQL データベース クラスター内に PostGIS をインストールし、データベース自体を有効化して PostGIS を使用できるようにする必要があります。 詳細については、PostgreSQL のドキュメントをご参照ください。 | |
Global ID | varchar(38) | Global ID はジオデータベースでのみサポートされています。 | |
GUID | varchar(38) | UUID | |
Long integer | 整数 | serial | |
Object ID | ジオデータベースの場合は integer (32 ビット) または bigint (64-bit) データベースの場合はシリアル | ArcGIS の ObjectID データ タイプは、テーブル (またはフィーチャクラス) に登録された RowID 列です。 1 つのテーブルにつき、1 つだけ存在します。 | |
ラスター | bytea | ArcGIS ラスター データ タイプは、ジオデータベースのみでサポートされます。 | |
Short integer | SMALLINT | ||
Text | character varying | character、text | SQL クライアントまたはサード パーティ製のアプリケーションを使用してテキスト フィールドを作成する場合に、長さを定義しないと (つまり、長さを 0 にする)、ArcGIS でこのフィールドが CLOB として読み取られます。 |
Time Only | time | タイム ゾーンを含まない time、タイム ゾーンを含む time | |
Timestamp Offset | 該当なし | サポート対象外 |
テーブル内に ArcGIS でサポートされていないデータ タイプの列がある場合、その列をテキストにキャストできます。 ただし、これを実行するのは、列内の値を表示する場合だけにしてください。その列の値で解析を行う必要がある場合は、実行しないでください。 たとえば、SELECT ステートメントを実行して、テーブル B 内の列を選択し、小数の列 (total) をテキストにキャストできます。
SELECT id, name, total::text
FROM me.mydb.tableb;
ジオメトリ データ タイプ
表に示すように、ArcGIS では、PostgreSQL ST_Geometry、Esri Geometry、PostGIS Geography という 3 種類の空間データ タイプを PostGIS に作成および操作できます。 以降の 2 つのセクションでは、これらのデータ タイプの背景について説明します。
ST_Geometry
以下では、ST_Geometry 空間データ タイプの概要について説明します。 PostgreSQL の実装に固有の情報については、「PostgreSQL の ST_Geometry」をご参照ください。
ST_Geometry データ タイプはユーザー定義データ タイプ (UDT) の SQL 3 Specification を実装しているため、ランドマークの場所、道路、土地区画といった空間データを格納できる列を作成することができます。 これは、ジオデータベースおよびデータベースに対して、ISO および Open Geospatial Consortium (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) 表現と Well-Known Text (WKT) 表現を使用します。
PostGIS には、ジオメトリとジオグラフィの 2 つの空間タイプがあります。 それらを使用するには、PostGIS データベース クラスターに PostgreSQL をインストールし、PostGIS テンプレート データベースを使用して、ジオデータベースを格納するデータベースを作成する必要があります。 使用する ArcGIS のリリースでサポートされているバージョンの PostGIS をインストールします。
ArcGIS で PostGIS 空間格納タイプを使用するときは、以下の点に留意してください。
- ジオデータベースとして使用する PostGIS データベースを PostgreSQL データベース テンプレートを使用して作成するか、データベースで PostGIS を有効化する必要があります。
- sde ユーザーおよびジオデータベースまたはデータベース内の PostGIS データにアクセスするユーザーには、特定の PostGIS ビューに関する権限が付与されている必要があります。
- 作成するフィーチャクラスは、PostGIS の public.spatial_ref_sys ビューに列挙されている空間参照だけを使用できます。 ここにない空間参照を指定した場合、フィーチャクラスの作成は失敗します。
- これらの空間データ タイプのいずれかを使用するフィーチャクラスを作成するときは、GEOMETRY_STORAGE パラメーターを PG_GEOMETRY (PostGIS ジオメトリの場合) または PG_GEOGRAPHY (PostGIS ジオグラフィの場合) に設定したコンフィグレーション キーワードを指定する必要があります。
- PostgreSQL タイプを使用する PostGIS のジオデータベースのフィーチャクラスには、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 ジオグラフィ タイプに対する設定) のいずれかに設定できます。 したがって、必要な PostGIS 空間データ タイプに設定された GEOMETRY_STORAGE パラメーター (PG_GEOMETRY または PG_GEOGRAPHY) を含むコンフィグレーション キーワードを指定する必要があります。
ST_Geometry 空間タイプを使用するジオデータベースを作成するとき、DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE パラメーター値は ST_GEOMETRY に設定されます。 PostGIS 空間タイプを使用するジオデータベースを作成するとき、DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE パラメーター値は PG_GEOMETRY に設定されます。
ほとんどのデータを異なる空間タイプで格納する場合は、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 のドキュメントをご参照ください。
PostgreSQL から ArcGIS AllSource データベースに接続して、PostGIS の列を含むテーブルをジオデータベースに登録することができます。 詳細については、「ジオデータベースへのテーブルまたはビューの登録」をご参照ください。