ArcGIS でサポートされている PostgreSQL のデータ タイプ

データベースにテーブルを作成する、またはテーブルに列を追加するときに、列のデータ タイプを定義します。データ タイプによって次のことが決定します。

  • 列に保存できる値
  • その列のデータに対して使用できる操作
  • 列のデータをデータベースに保存する方法

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 フィールド データ タイプ」をご参照ください。

ジオメトリ

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

テキスト

character varying

character、varchar、text

テーブル内に 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

  • 座標空間で場所を 1 つ占有する 0 次元のジオメトリ。
  • X,Y 座標値が 1 つあり、常にシンプルであり、境界は NULL です。

ST_LineString

  • 線形に補間されたパスを定義するポイント列として格納される 1 次元オブジェクト。
  • ST_LineString には長さがあります。
  • ST_LineString はその内部と交わっていなければシンプルです。
  • 閉じた ST_LineString の端点 (境界) は、空間内の同じポイントを占めます。
  • ST_LineString は閉じていてシンプルである場合はリングです。
  • 端点は、ST_LineString が閉じていなければ、通常は ST_LineString の境界を形成します。ST_LineString が閉じていれば、境界は NULL です。
  • ST_LineString の内部は、閉じていなければ端点間を結ぶパスであり、閉じている場合は内部が連続しています。

ST_Polygon

  • 一連のポイントとして格納される 2D サーフェスであり、外部の境界リングと 0 個以上の内部リングを定義します。
  • ST_Polygon には面積があり、常にシンプルです。
  • 外部リングと内部リングは ST_Polygon の境界を定義し、リング間で囲まれた空間は ST_Polygon の内部を定義します。
  • ST_Polygon のリングは接点で交わる場合がありますが、決して交差しません。

ST_MultiPoint

  • ST_Point のコレクション。
  • ディメンションは 0 です。
  • ST_MultiPoint は、同じ座標空間を占めるエレメントが 1 つもなければ、シンプルです。
  • ST_MultiPoint の境界は NULL です。

ST_MultiLineString

  • ST_LineString のコレクション。
  • ST_MultiLineString には長さがあります。
  • ST_MultiLineString は、ST_LineString エレメントの端点でのみ交わる場合はシンプルです。
  • ST_LineString エレメントの内部が交差している場合、ST_MultiLineString はシンプルではありません。
  • ST_MultiLineString の境界は、ST_LineString エレメントの交差していない端点です。
  • ST_MultiLineString が閉じているのは、すべての ST_LineString エレメントが閉じている場合です。
  • ST_MultiLineString のすべてのエレメントのすべての端点が交差している場合、ST_MultiLineString の境界は NULL です。

ST_MultiPolygon

  • ポリゴンのコレクション。
  • ST_MultiPolygon には面積があります。
  • ST_MultiPolygon の境界は、そのエレメントの外部リングと内部リングの長さを累積したものです。
  • ST_MultiPolygon の内部は、そのエレメントである ST_Polygon の内郭を累積したものとして定義されます。
  • ST_MultiPolygon のエレメントの境界は接点でのみ交わる場合があります。

ST_Geometry サブタイプ

各サブクラスは 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 の列を含むテーブルをジオデータベースに登録することができます。詳細については、「ジオデータベースへのテーブルまたはビューの登録」をご参照ください。


このトピックの内容
  1. ジオメトリ データ タイプ