Esri では長年にわたり、地理情報を格納するために、カバレッジ、シェープファイル、ジオデータベースという主な 3 つのデータ形式を開発してきました。シェープファイルは、地理情報と属性情報を格納するためのシンプルな形式を提供するために開発されました。このシンプルな特徴から、シェープファイルは非常に一般的でオープンなデータ転送形式になっています。シェープファイルはシンプルで扱いやすいのですが、制約があり、ジオデータベースにはできてもシェープファイルにはできないことがたくさんあります。シェープファイルを使用する際は、その制限について注意する必要があります。一般的に、次の制限があります。
- 地理データは、シェープファイルに格納できる単なるフィーチャおよび属性ではありません。たとえば、アノテーション、属性リレーションシップ、トポロジ リレーションシップ、属性ドメインおよびサブタイプ、座標精度および解像度、その他多くの機能は、ジオデータベースではサポートされている一方で、シェープファイルではサポートされていません。
- シェープファイルは、データ転送において一般的で、公開されているデータ形式であるため、Esri 製でない多くのソフトウェア パッケージはシェープファイルを出力します (シェープファイルの形式の仕様は https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf をご参照ください)。ところが、これらのパッケージが作成するシェープファイルの形式は、必ずしも適切ではありません。別のソースから破損したシェープファイルを受け取ることもあります。
- シェープファイルは、dBASE ファイル形式 (*.dbfファイル) を使用して属性を格納します。dBASE は 1980 年代の初めに開発された非 Esri 形式であり、その当時、属性のテーブルを格納する最も一般的な形式でした。しかし、それから長い年月を経るうちに、Unicode 標準など世界のほとんどの表記体系をサポートするために、データ表現に対して多くの改良が施されています。そのため、シェープファイルは英語以外の言語で情報を格納するのに向かなくなっています。
- ジオデータベースのフィーチャクラスと異なり、ArcGIS はシェープの長さやシェープのエリア フィールドを計算したり、維持したりしません。
これらをはじめとする問題のために、シェープファイルはアクティブなデータベース管理には適していません。シェープファイルは、データの作成、編集、バージョン対応、アーカイブという現代のライフ サイクルを扱うことができません。
シェープファイルを使用すべき場合
- 非 Esri ソフトウェア アプリケーションで使用するために、データをエクスポートする場合
- シンプルなフィーチャと属性を迅速に記述する場合 (ただし、後述する制限に注意する必要があります)
シェープファイルを使用すべきでない場合
後述する例外はありますが、シェープファイルはシンプルなフィーチャ ジオメトリの格納に使用できます。ただし、シェープファイルは属性に関して大きな問題があります。たとえば、シェープファイルの属性には NULL 値を格納できず、数値は切り上げられます。Unicode 文字列のサポートも十分ではなく、10 文字を超えるフィールド名は使用できません。また、日付フィールドに時刻を格納することはできません。これらは、主な問題にすぎません。さらに、シェープファイルは、ドメインやサブタイプなど、ジオデータベースに備わっている機能をサポートしていません。そのため、属性が非常にシンプルでジオデータベースの機能が必要でない場合以外は、シェープファイルは使用しないでください。
シェープファイルのコンポーネントとファイル拡張子
シェープファイルは、3 つ以上のファイルに格納されます。これらは、すべて同じ接頭辞を持ち、同じシステム フォルダー (シェープファイル ワークスペース) 内に格納されます。個々のファイルを表示するには、ArcCatalog ではなく、Windows エクスプローラーでフォルダーを参照します。
拡張子 | 説明 | 必須? |
---|---|---|
.shp | フィーチャ ジオメトリを格納するメイン ファイル。このファイルに格納されるのはジオメトリだけで、属性は格納されていません。 | はい |
.shx | *.shp のコンパニオン ファイルで、*.shp ファイル内にある個々のフィーチャ ID の位置を格納します。 | はい |
.dbf | フィーチャの属性情報を格納する dBASE テーブル。 | はい |
*.sbn および *.sbx | フィーチャの空間インデックスを格納するファイル。 | 不要 |
.atx | 各 dBASE 属性インデックスに対して作成されます。 | 不要 |
*.ixs および *.mxs | 読み取り/書き込みモードのシェープファイルのジオコーディング インデックス。 | 不要 |
.prj | 座標系情報を格納するファイル。 | 不要 |
.xml | ArcGIS のメタデータ。シェープファイルに関する情報を格納します。 | 不要 |
ジオメトリの制限
- シェープファイルのコンポーネント ファイルには、2 GB というサイズの制限があります。これは、最大で約 7,000 万のポイント フィーチャに相当します。シェープファイルに格納できるラインまたはポリゴン フィーチャの実際の数は、各ラインまたはポリゴンの頂点 (頂点はポイントに相当します) の数によって変わります。
- シェープファイルには、ジオデータベース フィーチャクラスのような XY 許容値がありません。XY 許容値は、複数のメジャー値が同一と見なされるための最大距離です。この XY 許容値は、同じフィーチャクラスのフィーチャ間や、複数の異なるフィーチャクラス間のリレーションシップを評価する場合に使用されます。また、フィーチャを編集するときにも広範に使用されます。オーバーレイ ツール、[クリップ (Clip)] ツール、[空間検索 (Select Layer By Location)] ツールや、2 つ以上のフィーチャクラスを入力として使うツールなど、フィーチャ間の比較を行う処理を実行している場合は、シェープファイルではなく、(XY 許容値のある) ジオデータベース フィーチャクラスを使用する必要があります。
- 圧縮方法の違いから、シェープファイルはファイル ジオデータベースや SDE と比べて、3 ~ 5 倍のディスク領域が必要になります。
- シェープファイルはマルチパッチをサポートしていますが、次の高度なマルチパッチ機能はサポートしていません。
- テクスチャ座標
- テクスチャとパート カラー
- 照明法線
- シェープファイルの空間インデックスは、ジオデータベース フィーチャクラスと比較して非効率的です。つまり、ジオデータベース フィーチャクラスと比較して、空間検索 (ポリゴン内のフィーチャの選択など) に時間がかかります。これは、大量のフィーチャを処理する場合のみ問題になります。
- パラメーターで定義されたカーブ (円弧の曲線とも呼ばれます) は、シェープファイルではサポートされていません。「曲線の作成」で説明しているように、パラメトリック カーブは、ジオデータベース フィーチャクラスを編集することで作成されます。円弧の曲線は、曲線の描画に数式を使用します。円弧の曲線フィーチャを含むジオデータベース フィーチャクラスをシェープファイルにエクスポートする場合、カーブ フィーチャは、曲線を捕捉するために、間隔の短い頂点を持つシンプル ライン フィーチャに変換されます。
属性の制限
- 他の形式と異なり、シェープファイルは、数値属性をバイナリ形式ではなく文字形式で格納します。実数 (つまり、小数点以下を含む数) については、これにより桁数のエラーが生じることがあります。この制限に該当するのは属性だけで、シェープ座標は該当しません。次の表は、各属性のデータ タイプのフィールド幅をまとめたものです。
ジオデータベースのデータ タイプ dBASE フィールド タイプ dBASE フィールド幅 (文字数) Object ID
数値
9
Short Integer
数値
4
Long Integer
数値
9
Float (単精度浮動小数点数)
Float (単精度浮動小数点数)
13
Double (倍精度浮動小数点数)
Float (単精度浮動小数点数)
13
テキスト
文字
254
日時
日時
8
dBASE のフィールド幅 - dBASE ファイル標準では、フィールド名と値に ANSI 文字しか使用できません。Esri は、dBASE ファイルに対して広範な Unicode サポートを追加し、Unicode のフィールド名と値を格納できるようにしました。しかし、この追加サポートは ArcGIS 内でのみ使用可能で、非 Esri アプリケーションでは利用できない場合があります。
- 日付フィールドには、日付だけを指定できます。時刻は指定できません。
- フィールド名は 10 文字以下に制限されます。
- 属性の最大レコード長は 4,000 バイトです。レコード長は、すべてのフィールドを定義するために使用されるバイト数であり、実際の値を格納するために使用されるバイト数ではありません。
- フィールドの最大数は 255 です。シェープファイルへの変換で、この制限を超えた場合は、最初の 255 フィールドだけが変換されます。
- dBASE ファイルには、少なくとも 1 つのフィールドが含まれる必要があります。新しいシェープファイルまたは dBASE テーブルを作成する場合、デフォルトで整数の ID フィールドが作成されます。
- dBASE ファイルは、BLOB タイプ、GUID、グローバル ID、座標 ID、ラスター フィールド タイプはサポートしていません。
- dBASE ファイルは WHERE 句の他に SQL サポートをほとんどサポートしていません。
- 属性インデックスは、編集の保存時に削除され、一から再作成する必要があります。
NULL 値の表現
シェープファイルでは、NULL 値はサポートされません。NULL を持つフィーチャクラスがシェープファイルに変換されるとき、あるいはデータベース テーブルが dBASE ファイルに変換されるとき、NULL 値は次の表に示すように変更されます。
NULL 値を含むデータ タイプ | NULL 値の置換 |
---|---|
Number - ツールに NULL、無限、NaN (Not a Number) を出力する必要がある場合 | -1.7976931348623158e+308 (IEEE 標準における負の最大値) |
Number (その他すべてのジオプロセシング ツール) | 0 |
テキスト | " " (空白 - 単一スペース) |
日時 | ゼロとして格納されますが、「<null>」と表示されます。 |
サポートされていない機能
シェープファイルには、ワークスペースまたはフィーチャクラスのレベルで拡張されたデータ タイプがありません。ジオデータベース フィーチャクラスまたはその他の形式からシェープファイルに変換すると、次の情報が失われます。
- サブタイプ
- 属性ドメイン
- ジオメトリック ネットワーク
- トポロジ
- アノテーション
シェープの長さおよび面積
ジオデータベースに格納されたラインまたはポリゴン フィーチャクラスでは、ArcGIS は shape_length および shape_area フィールドを計算し維持します。つまり、ジオデータベース フィーチャクラスのラインまたはポリゴンのシェープを編集すると、shape_length および shape_area フィールドの値が再計算されて、編集内容がフィーチャに反映されます。これは、シェープファイルの場合は異なります。シェープファイルに shape_area または shape_leng フィールドがあり、これらが編集された場合でも、その編集内容は更新されません。
シェープファイルとジオプロセシング
フィーチャクラスを出力するジオプロセシング ツールでは、出力形式としてシェープファイルとジオデータベース フィーチャクラスのいずれかを選択できます。同様に、テーブルを出力するツールを使用すると、dBASE ファイル (*.dbf) かジオデータベース テーブルを出力として選択できます。使用している形式と、ジオデータベースの入力からシェープファイルの出力への変換結果には、必ず注意する必要があります。
ジオプロセシング ツールは、出力フィーチャクラスまたはテーブルを自動生成します。この自動生成された出力は、「現在およびテンポラリ ワークスペース環境の使用」で説明されているように、多くの要因に基づいています。テンポラリ ワークスペース環境をジオデータベースではなくシステム フォルダーに設定している場合、自動生成された出力フィーチャクラスは、シェープファイルまたは dBASE ファイルになります。
テンポラリ ワークスペースをファイル ジオデータベースに設定して、自動生成された出力がシェープファイルや *.dbf テーブルではなく、ファイル ジオデータベースに書き込まれるようにすることをお勧めします。
シェープファイルは、書き込み処理が高速であるため、モデルの実行を高速化するためにモデルの中間データの書き込みによく使用されます。しかし、ファイル ジオデータベースへの書き込みもシェープファイルへの書き込みと同じくらい高速であるため、実行速度が非常に重要である場合を除いて、中間および出力データにはファイル ジオデータベースを必ず使用してください。シェープファイルを使用する場合は、前述した制限に注意し、シンプルなフィーチャと属性だけにシェープファイルを使用してください。中間データにシェープファイルを使用する代わりに、フィーチャをインメモリ ワークスペースに書き込む方法もあります。
空間参照とシェープファイル
「空間参照とジオプロセシング」では、ジオプロセシング ツールを使う際の空間参照プロパティの重要性について説明しています。空間参照を制御する多くのジオプロセシング環境がツールで使用されています。次の環境は、ツールの出力がシェープファイルの場合はサポートされていません。