ジオデータベースは、Microsoft の geometry 空間データ タイプおよび geography 空間データ タイプを使用したベクター データの格納をサポートしています。これらのタイプは SQL Server で利用可能であり、個別のインストールは不要です。また、ArcGIS を使用して、geometry または geography 列を含むデータベース テーブルにアクセスできます。
次のいずれかに当てはまる場合、ArcGIS で geometry 格納タイプを使用します。
- 使用する座標系が地理座標系でないか、SQL Server のデータ ディクショナリに定義されていない。
- 形状と一緒に Z 値または M 値を格納する。
次のいずれかに当てはまる場合、ArcGIS で geography 格納タイプを使用します。
- 使用する座標系が SQL Server データ ディクショナリで定義されている。
- データの空間範囲が大きく、SQL の面積および長さの計算を使用する必要がある。
大楕円ライン内挿を使用する SQL の面積および長さの計算結果は、大きな空間範囲に対する平面ライン内挿を使用した場合とは大きく異なる可能性があります。
- SQL 空間クエリには、大楕円ライン内挿を使用する必要があります。
空間タイプを指定するコンフィグレーション キーワードの使用
デフォルトでは、SQL Server のジオデータベースは、geometry タイプを使用します。geography タイプを SQL Server 内のジオデータベースへの格納に使用する場合、以下のうちのいずれかを実行する必要があります。
- DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE コンフィグレーション パラメーターを GEOGRAPHY に変更します。DEFAULTS キーワードのGEOMETRY_STORAGE パラメーターを変更するのは、ほとんどのユーザーが geography タイプをデータに使用するケースが大半を占める場合のみにしてください。
- フィーチャクラスの作成時に、GEOGRAPHY の GEOMETRY_STORAGE コンフィグレーション パラメーターを指定するコンフィグレーション キーワードを指定します。一部のデータだけを geography タイプで格納する場合は、フィーチャクラスの作成時に別のキーワードを指定します。キーワードとして「GEOGRAPHY」が用意されていますが、ユーザーが固有のカスタム キーワードを作成することもできます。
SQL Server データベース (ジオデータベースではない) 内にフィーチャクラスを作成する場合、geometry または geography キーワードのいずれかを選択します。
ジオデータベースへの既存の空間テーブルの登録
サードパーティ アプリケーションや SQL を使用して、SQL Server の空間タイプの列が含まれるテーブルを作成した場合は、このテーブルをジオデータベースに登録して、リレーションシップ クラス、トポロジ、ジオメトリック ネットワーク、パーセル ファブリックなどのジオデータベース機能を利用し、サブタイプ、デフォルト値、ドメイン、または整合性ルールを持たせることができます。これを実行するには、テーブルが次の前提条件を満たしている必要があります。
- テーブルを登録するユーザーがテーブルの所有者でなくてはいけません。
- テーブルの空間列が geometry タイプまたは geography タイプのいずれかでなくてはいけません。
- 列内のすべてのシェープが、ポイント、ライン、ポリゴン、マルチポイント、マルチストリング、マルチポリゴンのいずれかであり、同じ空間タイプでなくてはいけません。
テーブルをジオデータベースに登録した後で、SQL を使用して異なるタイプのシェープを列に追加することはサポートされておらず、その場合、フィーチャクラスは予測できない振舞いをします。
- 列のすべてのシェープが同じ空間参照 ID (SRID) を使用しなくてはいけません。
- 登録時に指定した SRID は SDE_spatial_references システム テーブルに存在していなくてはいけません。存在しない場合、登録時に投影法を定義する必要があります。
- テーブルに主キーが含まれている場合は、テーブルをクラスタリングしなくてはいけません。
メモ:
既存のデータベースでジオデータベースが有効であっても、既存のテーブルは自動的にはジオデータベースに登録されません。ジオデータベースに加えるテーブルやフィーチャクラスは、ジオデータベースに個別に登録する必要があります。
空間インデックスの作成
SQL Server では、空間インデックスを作成できるようにするために、テーブルに主キーを作成する必要があります。
ArcGIS の場合
ArcGIS を使用して、geometry 列または geography 列を含むフィーチャクラスを作成すると、デフォルトでビジネス テーブルの ObjectID 列にクラスター化された主キーが作成されます。次に ArcGIS は、SQL Server のデフォルトを使用して空間インデックスを作成します。フィーチャクラスをバージョン対応登録すると、クラスター化された主キーが ADD テーブルの ObjectID 列と state id 列に作成され、空間インデックスが作成されます。
ArcGIS は、インデックスを作成するデータの範囲として geometry または geography 空間列を使用し、フィーチャクラスのバウンディング ボックスを計算します。この範囲外にあるフィーチャはインデックス付けされませんが、空間検索では検索の対象となります。フィーチャクラスの範囲が設定されていない場合は、フィーチャクラスの空間参照系に対する最大の座標範囲がバウンディング ボックスで使用されます。フィーチャクラスの範囲を、[フィーチャクラス プロパティ] ダイアログ ボックスから設定または再計算できます。フィーチャクラスがジオデータベースに存在する場合、空間インデックスが削除されて再作成されたときに、最新の範囲を使用して境界ボックスが調整されます。
ArcGIS 以外
ArcGIS 以外のアプリケーションで作成された空間テーブル、たとえば SQL を使用して作成されたテーブルの場合は、テーブルに主キーを作成してから SQL を使用して空間インデックスを作成します。次に、geometry タイプの列が含まれるテーブルに空間インデックスを作成するための SQL 構文を示します。
CREATE SPATIAL INDEX <index_name>
ON <table> (<spatial column>)
USING GEOMETRY_GRID
WITH (
BOUNDING_BOX = minx,miny,maxx,maxy),
GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high),
CELLS_PER_OBJECT = n,
<other regular btree index options like filegroups, fill factors, etc>
)
次の構文は、geography 列に空間インデックスを作成します。
CREATE SPATIAL INDEX <index_name>
ON <table> (<spatial column>)
USING GEOGRAPHY_GRID
WITH (
GRIDS = (low|medium|high, low|medium|high, low|medium|high, low|medium|high),
CELLS_PER_OBJECT = n,
<other regular btree index options like filegroups, fill factors, etc>
)
ArcGIS は、追加のジオメトリック エレメントを格納するための列を追加します。
geometry および geography タイプは、ジオデータベースでサポートしなければならないすべてのタイプのジオメトリック エレメントを格納することはできません。したがって、SQL Server のジオデータベースで、geometry または geography 格納タイプを使用するフィーチャクラスを作成または登録する場合、ArcGIS は、このような追加のジオメトリック エレメントを格納するために、ビジネス テーブルに列を追加します。この列は gdb_geomattr_data と呼ばれます。追加のジオメトリック エレメントには次のものがあります。
- 高度な編集ツールで作成された円弧、ベジェ曲線などのパラメーター オブジェクト
- PointID
- マルチパッチ フィーチャ
- ArcGIS Spatial Analyst エクステンション からのサーフェス パッチ
ArcGIS がデータ ソースにこのような追加ジオメトリック エレメントがあることを検出すると、単純なジオメトリック表現が shape 列に、変更されていないデータ (追加エレメントを含む) が gdb_geomattr_data 列に、それぞれ格納されます。
ArcGIS で SQL Server の geography タイプを使用する場合の既知の制約
ほとんどの場合、geography データの計測値はメートル単位です。メジャーの単位は sys.spatial_ref_system で示されるため、ユーザーのデータに関連付けられている EPSG 値で使用される単位を確認します。