ArcGIS と Microsoft 空間タイプ
ジオデータベースは、Microsoft の geometry 空間データ タイプおよび geography 空間データ タイプを使用したベクタ データの格納をサポートしています。これらのタイプは SQL Server で利用可能であり、個別のインストールは不要です。また、ArcGIS を使用して、geometry または geography 列を含むデータベース テーブルにアクセスできます。
geometry タイプと geography タイプ
Microsoft の geometry と geography タイプは、どちらも空間データへの SQL アクセスを提供します。次のセクションでは、これら 2 つの空間タイプのその他の特徴を比較します。Microsoft 空間タイプの詳細については、SQL Server のマニュアルをご参照ください。
geometry タイプ
- geometry タイプは、XY 座標系をサポートしています。
- レンダリングと空間的な比較には、平面(平面地球、ユークリッド)の計算と頂点間の直線内挿が使用されます。
- OGC(Open Geospatial Consortium)の Simple Features for SQL Specification バージョン 1.1.9 に従い、SQL MM、ISO 規格に準拠しています。
次のいずれかに当てはまる場合、ArcGIS で geometry 格納タイプを使用する可能性があります。
- 使用する座標系が地理座標系でないか、SQL Server のデータ ディクショナリに定義されていない。
- SQL Server 2008 または 2008 R2 を使用していて、形状と一緒に Z 値または M 値を格納する。
geography タイプ
- geography タイプは、GPS の緯度と経度など、多くの標準地理座標系をサポートしています。
Microsoft では、SQL Server データ ディクショナリで定義されている SRID と地理座標系を使用するように求めています。
- 計算と空間比較には、楕円(丸い地球)モデルと、頂点間の線分の大楕円内挿が使用されます。
- 地球(回転楕円体)規模のレイヤ範囲を使用します。
データの座標は、地球規模の範囲を超えることはできません。
- SQL Server 2008 および 2008 R2 では、フィーチャは 1 つの半球より小さい必要があります。
- ArcGIS で使用するとき、SQL Server 2008 または 2008 R2 を使用している場合は、フィーチャに Z 値または M 値の座標は使用できません。
geography 格納タイプは、次の場合に ArcGIS で使用する可能性があります。
- 使用する座標系が SQL Server データ ディクショナリで定義されている。
- SQL Server 2008 または 2008 R2 を使用していて、フィーチャのために Z 値または M 値を格納する必要がない。
- ArcGIS で Z 値と M 値がサポートされている SQL Server 2012 を使用している。
- データの空間範囲が大きく、SQL の面積および長さの計算を使用する必要がある。
大楕円ライン内挿を使用する SQL の面積および長さの計算結果は、大きな空間範囲に対する平面ライン内挿を使用した場合とは大きく異なる可能性があります。
- SQL 空間クエリには、大楕円ライン内挿を使用する必要があります。
ArcGIS での Microsoft 空間タイプの使用
Microsoft 空間タイプを指定するコンフィグレーション キーワードの使用
デフォルトでは、SQL Server のジオデータベースは、Microsoft geometry タイプを使用します。Microsoft geography タイプを使用して運用している SQL Server データベースのジオデータベースに格納する場合、(1)SDE_dbtune テーブルの DEFAULTS コンフィグレーション キーワードの GEOMETRY_STORAGE パラメータを GEOGRAPHY に変更するか、(2)フィーチャクラスの作成時に、GEOMETRY_STORAGE パラメータが GEOGRAPHY に設定されているコンフィグレーション キーワードを指定します。
DEFAULTS キーワードのGEOMETRY_STORAGE パラメータを変更するのは、ほとんどのユーザが geography タイプをデータに使用するケースが大半を占める場合のみにしてください。一部のデータだけを geography タイプで格納する場合は、フィーチャクラスの作成時に別のキーワードを指定します。キーワードとして「GEOGRAPHY」が用意されていますが、ユーザが固有のカスタム キーワードを作成することもできます。
SDE_dbtune テーブル内の値を変更するには、sdedbtune 管理コマンドを使用します。このコマンドは、ArcSDE Application Server for SQL Server のインストールを使用してインストールできます。
SQL Server データベース内にフィーチャクラスを作成する場合、geometry または geography キーワードのいずれかを選択します。
既存のジオデータベースへの空間テーブルの登録
サードパーティ アプリケーションや SQL を使用して、Microsoft の空間タイプの列が含まれるテーブルを作成した場合は、このテーブルをジオデータベースに登録して、リレーションシップ クラス、トポロジ、ジオメトリック ネットワーク、Cadastral Fabric、テレイン、スキーマなどのジオデータベース機能を利用し、サブタイプ、デフォルト値、ドメイン、または整合性ルールを持たせることができます。これを実行するには、テーブルが次の前提条件を満たしている必要があります。
- テーブルを登録するユーザがテーブルの所有者でなくてはいけません。
- テーブルの空間列が geometry タイプまたは geography タイプのいずれかでなくてはいけません。
- 列内のすべてのシェープが、ポイント、ライン、ポリゴン、マルチポイント、マルチストリング、マルチポリゴンのいずれかであり、同じ空間タイプでなくてはいけません。
テーブルをジオデータベースに登録した後で、SQL を使用して異なるタイプのシェープを列に追加することはサポートされておらず、その場合、フィーチャクラスは予測できない振舞いをします。
- 列のすべてのシェープが同じ空間参照 ID(SRID)を使用しなくてはいけません。
- 登録時に指定した SRID は SDE_spatial_references システム テーブルに存在していなくてはいけません。存在しない場合、登録時に投影法を定義する必要があります。
- テーブルに主キーが含まれている場合は、テーブルをクラスタリングしなくてはいけません。
テーブルを ArcGIS for Desktop からジオデータベースに登録する方法については、「ジオデータベースへのテーブルの登録」をご参照ください。

既存のデータベースでジオデータベースが有効であっても、既存のテーブルは自動的にはジオデータベースに登録されません。ジオデータベースに加えるテーブルやフィーチャクラスは、ジオデータベースに個別に登録する必要があります。
空間インデックスの作成
SQL Server では、空間インデックスを作成できるようにするために、テーブルに主キーを作成する必要があります。
ArcGIS の場合
ArcGIS を使用して geometry 列または geography 列を持つフィーチャクラスをジオデータベースに作成すると、デフォルトで、ArcGIS はビジネス テーブルの RowID(ObjectID)列にクラスタ化された主キーを作成してから、フィーチャクラスの作成時に使用された、SDE_dbtune テーブルのコンフィグレーション キーワードの B_MS_SPINDEX パラメータに設定されている値に基づいて空間インデックスを構築します。フィーチャクラスがバージョン対応登録されていると、クラスタリングされた主キーは ADD テーブルの RowID 列とステート ID 列に作成され、フィーチャクラスの作成時に使用されたコンフィグレーション キーワードの A_MS_SPINDEX に設定されている値に基づいて空間インデックスが構築されます。この両方のパラメータのデフォルト値は次のとおりです。
GRIDS = (MEDIUM, MEDIUM, MEDIUM, MEDIUM), CELLS_PER_OBJECT = 16
SDE_dbtune テーブルの値の設定については、「DBTUNE テーブルの内容の変更」をご参照ください。
データベースまたはジオデータベースに geometry または geography 空間列を持つフィーチャクラスを ArcGIS で作成すると、フィーチャクラスのバウンディング ボックスが、インデックスを作成するデータの対象範囲として計算されます。この範囲外にあるフィーチャはインデックス付けされませんが、空間検索では検索の対象となります。フィーチャクラスの範囲が設定されていない場合は、フィーチャクラスの空間参照系に対する最大の座標範囲がバウンディング ボックスで使用されます。フィーチャクラスの範囲を、[フィーチャクラス プロパティ] ダイアログ ボックスの [フィーチャの範囲] タブから設定または再計算することもできます。ジオデータベース内にフィーチャクラスがある場合、レイヤが LOAD_ONLY_IO モードから NORMAL_IO モードに切り替わるときは常に、バウンディング ボックスが最新の範囲で調整されます。
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 で SQL Server の geography タイプを使用する場合の既知の制約
SQL Server geography データタイプのデータをエンタープライズ ジオデータベースに格納する場合に、注意が必要な制約を次に挙げます。
- SQL Server 2008 または 2008 R2 を使用している場合、ArcGIS は geography データ タイプに Z 値または M 値を格納できません。このため、別のジオデータベースのシェープファイルやフィーチャクラスなどの既存のデータをジオデータベースに取り込むときに、geography データ タイプを使用して格納する必要がある場合、そのデータセットは 3D(Z 値)またはメジャー(M 値)の属性を保持できません。
Z 属性と M 属性は、SQL Server 2008 または 2008 R2 のジオデータベースにデータをインポートする前に無効にする必要があります。別の方法として、3D 属性またはメジャー属性を持つデータを geometry または Compressed Binary 格納タイプを使用するフィーチャクラス、または SQL Server 2012 のジオデータベースにインポートすることができます。
- ほとんどの場合、geography データの計測値はメートル単位です。メジャーの単位は sys.spatial_ref_system で示されるため、ユーザのデータに関連付けられている EPSG 値で使用される単位を確認します。
- SQL Server 2008 で geography フィーチャクラスを地球規模の範囲にズームすると、半球ルールに違反するか、有効なジオグラフィ範囲外の座標を持つ空間フィルタが生成されます。この場合、フィルタの形状は作成されず、検索しても結果が返されません。