ArcGIS と Microsoft 空間タイプ
ジオデータベースは、Microsoft の geometry 空間データ タイプおよび geography 空間データ タイプを使用したベクタ データの格納をサポートしています。これらのタイプは SQL Server で利用可能であり、個別のインストールは不要です。SQL を使用して空間データにアクセスする場合には、これらのデータ タイプを使用します。
Microsoft の geometry タイプは既存の GIS 空間データ タイプと同様に、定義済みの投影系などの任意の平面の座標系を使用します。
Microsoft の geography タイプは、緯度経度の座標系とともに格納される楕円体上のデータに使用されます。
2 つのタイプは、空間の計算方法が異なります。Microsoft 空間タイプの詳細については、SQL Server のマニュアルをご参照ください。
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 というキーワードが用意されています。ユーザが固有のカスタム キーワードを作成することもできます。
既存のジオデータベースへの空間テーブルの登録
Microsoft の geometry 列または geography 列が含まれるテーブルを、サードパーティ アプリケーションや SQL を使用して作成した場合は、このテーブルをジオデータベースに登録して、リレーションシップ クラス、トポロジ、ジオメトリック ネットワーク、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 または geography タイプの列が含まれるテーブルに空間インデックスを作成するための 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>
)
エンタープライズ ジオデータベースにおける SQL Server Geography データ タイプの使用に関する既知の制約
SQL Server geography データタイプのデータをエンタープライズ ジオデータベースに格納する場合に、注意が必要な制約を次に挙げます。
- ArcGIS は、現在のリリースでは、geography データ タイプに Z 値または M 値を格納できません。このため、別のジオデータベースのシェープファイルやフィーチャクラスなどの既存のデータをジオデータベースに取り込むときに、geography データ タイプを使用して格納する必要がある場合、そのデータセットは 3D(Z 値)またはメジャー(M 値)の属性を保持できません。
Z 属性と M 属性は、データをインポートする前に無効にする必要があります。別の方法として、3D 属性またはメジャー属性を持つデータを geometry または Compressed Binary 格納タイプを使用するフィーチャクラスにインポートすることができます。
- ほとんどの場合、geography データのメジャーはメートル単位です。メジャーの単位は sys.spatial_ref_system で示されるため、ユーザのデータに関連付けられている EPSG 値で使用される単位を確認します。
- ArcGIS のこのリリースでは、個々のフィーチャとマルチパート フィーチャのすべてのパートは、単一の半球に属する必要があります。