シェープファイル (英語: Shapefile) は、 地理情報システム(GIS)間でのデータの相互運用におけるオープン標準として用いられるファイル形式である。例えば、井戸、川、湖などの空間要素がベクター形式であるポイント、ライン、ポリゴンで示され、各要素に固有名称や温度などの任意の属性を付与できる。また、データ変換ツールを用いると、Google Earthなどで用いられているKML形式に変換することもできる。

## 概要

シェープファイル形式は、幾何学的な位置と、それに関連する属性情報を格納するベクタ格納形式である。ただし、トポロジー情報を格納することはできない。シェープファイル形式は1990年代初めにArcViewVer2で導入された。今では様々なプログラムを使用してシェープファイル形式の地理情報を読み書きできるようになっている。

シェープファイル形式に保存できるのは、ポイント、ライン、ポリゴンという原始的な幾何学データだけであるため、その構造は単純である。シェープ(ポイント、ライン、ポリゴン)とデータ属性を使って、無数の地理的データの表現(representation)を作り出すことができる。表現により強力で正確な計算が可能になる。

「シェープファイル」という用語はかなりよく知られているが、この用語は誤解を招きやすい一面もある。なぜならシェープファイル形式は、共通のファイル名を持つ複数のファイルを同一ディレクトリに格納しておかねばならないからである。shp、.shx、.dbf(dBASE)の拡張子を持つ3種類のファイルは必須である。実際に地理的データが格納されている「シェープファイル」はこのうち特に.shpファイルのことだけを指すが、単独のファイルでは不完全であり、他の支援ファイルも必要である。

パフォーマンス向上のため、主にインデックスデータを格納するオプションファイルがある。シェープファイルに対応している過去のソフトウェアで扱う際は、個々のファイル名をDOS準拠(「8文字ファイル名.3末尾」例:testfile.shp)するように変更し、全ファイルを同じフォルダに配置する必要がある。

必須ファイル:

- .shp —シェープ規格:地形情報の本体。
- .shx —シェープインデックス規格:地形データの前方検索、後方検索を高速にするための位置インデックス。
- .dbf —属性規格:各シェープに対する縦表形式の属性情報。dBASE IV形式準拠。

オプションのファイル:

- .prj —投影規格:座標系および投影情報。投影法をWell-known text形式で記述したプレーンテキストファイル。
- .sbnおよび.sbx —空間インデックス。
- .fbnおよび.fbx —読み取り専用空間インデックス。
- .ainおよび.aih —テーブル内アクティブフィールドの属性インデックス。
- .ixs —読み書き用ファイルのジオコーディングインデックス。
- .mxs —読み書き用ファイルのジオコーディングインデックス(ODB規格)。
- .atx —DBFファイルの属性インデックス(ArcGIS Ver8以降)。
- .shp.xml —ISO 19115や他のXMLスキーマ言語などのXML形式地理空間メタデータ。
- .cpg —使用した文字コードの識別コードページ(DBF専用)指定。

.shp, .shx, .dbfの各ファイル内での各シェープの順序は互いに対応している(すなわち、.shpファイルの最初のレコードは.shx, .dfb各ファイルの最初のレコードと各々対応している)。.shpと.shxは異なるエンディアンに対応した様々なフィールドをもつため、ファイル作成時は適切に指定する必要がある。

### シェープ規格(.shp)

主ファイル(.shp)は地理的データを格納している。ファイルは単一の固定長ヘッダと、それに続く1つ以上の可変長レコードで構成されている。それぞれの可変長レコードは、レコードヘッダ部とレコード内容部でできている。ファイル形式の詳細説明は、ESRI Shapefile Technical Descriptionに記載されている。この形式と同じ「.shp」という拡張子を採用しているAutoCADのシェープフォントソース形式を混同しないこと。

2次元座標データの順序づけは直交座標系を想定しており、(X,Y) あるいは(東西座標, 南北座標)の順序である。東西軸と南北軸の順序をこのように取るのは、地理座標系において(経度, 緯度)の順に書くこととも整合している。座標系としては、3次元のZ座標軸(標高用)や、4次元のM座標軸(測定値用)もサポートしている。Z座標には各座標の3次元空間における標高を格納し、これは3次元コンピュータグラフィックスにおける可視化や解析などに用いられる。ユーザ定義のM座標には、線形参照値や、4次元空間における経過時間などを格納して、何らかの機能を持たせることができる。

主ファイルヘッダーは固定長100バイトで、17フィールドが含まれる。内訳は、4バイト(32ビット符号付整数 int32)整数フィールドが9個と、それにつづいて8バイト(倍精度)符号付浮動小数点フィールド8個である。

| バイト位置 | データ型 | エンディアン | 用途 |
| --- | --- | --- | --- |
| 0–3 | int32 | big | ファイル符号 (常に16進数値 0x0000270a を記述) |
| 4–23 | int32 | big | 未使用; uint32 を5個 |
| 24–27 | int32 | big | ファイル長さ (16-bit 単語の数で記述。ヘッダ分を含む) |
| 28–31 | int32 | little | バージョン番号 |
| 32–35 | int32 | little | Shape 種別(下記参照) |
| 36–67 | double | little | データセット内に含まれるすべてのシェープの最小包囲矩形 (Minimum bounding rectangle = MBR); 四つの倍精度値を次の順序で記述:min X, min Y, max X, max Y |
| 68–83 | double | little | Zの範囲; 二つの倍精度値を次の順序で記述: min Z, max Z |
| 84–99 | double | little | Mの範囲; 四つの倍精度値を次の順序で記述: min M, max M |

上記の主ファイルヘッダの後に、任意の数の可変長レコードが続く。各レコードの先頭8バイトはレコードヘッダ部である:

| バイト位置 | データ型 | エンディアン | 用途 |
| --- | --- | --- | --- |
| 0–3 | int32 | big | レコード通番 (1から起算) |
| 4–7 | int32 | big | レコード長さ (16-bit 単語の数で記述) |

上記のレコードヘッダの後に、レコード本体が続く:

可変長レコードの内容はシェープ種別によって異なる。シェープ種別はファイルヘッダ内で与えるか、Nullとするかのいずれかでなければならない。利用可能なシェープ種別は次のとおり:

| 種別コード | Shape種別 | 可変長レコードの内容 |
| --- | --- | --- |
| 0 | Null shape (空データ) | なし |
| 1 | Point (一点) | X, Y |
| 3 | Polyline (多角線) | MBR, パートの数, 点の数, パート群, 点群 |
| 5 | Polygon (多角形) | MBR, パートの数, 点の数, パート群, 点群 |
| 8 | MultiPoint (複数点) | MBR, 点の数、点群 |
| 11 | PointZ (3次元一点) | X, Y, Z オプション: M |
| 13 | PolylineZ (3次元多角線) | 必須: MBR, パートの数, 点の数, パート群, 点群, Z の範囲, Z の配列 オプション: M の範囲, M の配列 |
| 15 | PolygonZ (3次元多角形) | 必須: MBR, パートの数, 点の数, パート群, 点群, Z の範囲, Z の配列 オプション :M の範囲, M の配列 |
| 18 | MultiPointZ (3次元複数点) | 必須: MBR, 点の数, 点群, Z の範囲, Z の配列 オプション: M の範囲, M の配列 |
| 21 | PointM (M付き一点) | X, Y, M |
| 23 | PolylineM (M付き多角線) | 必須: MBR, パートの数, 点の数, パート群, 点群 オプション: M の範囲, M の配列 |
| 25 | PolygonM (M付き多角形) | 必須: MBR, パートの数, 点の数, パート群, 点群 オプション: M の範囲, M の配列 |
| 28 | MultiPointM (M付き複数点) | 必須: MBR, 点の数, 点群 オプション: M の範囲, M の配列 |
| 31 | MultiPatch (複数パッチ) | 必須: MBR, パートの数, 点の数, パート群, パート種別, 点群, Z の範囲, Z の配列 オプション: M の範囲, M の配列 |

### シェープインデックス規格(.shx)

インデックスには.shpと同じ100バイトのヘッダーが含まれ、その後にインデックスのレコード群が続く(.shpファイルの各レコードに対応している)。インデックスの各レコードは固定長8バイトで、以下の2フィールドから構成される:

| バイト位置 | データ型 | エンディアン | 用途 |
| --- | --- | --- | --- |
| 0–3 | int32 | big | レコード位置 (16-bit単語の数で記述) |
| 4–7 | int32 | big | レコード長 (16-bit単語の数で記述) |

このインデックスを使うことで、.shpファイル内での後方検索が高速になる。まず、シェープインデックス内で後方検索し(インデックスは固定長レコードなので、この検索は高速で行える)、次にその「レコード位置」フィールドを読み、.shpファイル内のその位置を読む。同様にして、任意レコード数だけ前方検索することも可能である。

### 属性規格(.dbf)

各図形の属性はdBASE形式で保存されるほか、代替形式としてXBase形式が存在する。XBase形式にはオープン仕様があり、それはShapefile C libraryのようなオープンソースライブラリで使われている。

### 投影規格(.prj)

.shp幾何データの地理座標系を指定する情報が含まれており、座標系の推測が可能とは限らないことからほぼ必須ファイルと見なされている。ArcGIS DesktopのVer9以降でWell-known text(WKT)形式でのファイル作成時に生成される。それ以前のArcGISと一部のサードパーティ製のソフトウェアでは、以下に示す別形式を生成する。

### 空間インデックス規格(.sbn)

ArcGISを含むEsriのソフトウェアのみで使用される空間インデックスのバイナリファイルである。Esriはフォーマットを公開していなかった、オープンソースコミュニティがリバースエンジニアリングし文書化された。現在は他のベンダーは実装していない。.shpファイル内に空間データ解析に必要な情報がすべて含まれているため、厳密には必要ではない。

## 制限事項

### 空間表現

ポリラインとポリゴンの角がポイントで構成されており、頂点の間隔は視覚的な倍率により決定する。形状を滑らかに表示するためには、多くの頂点が必要になる。折れ線を滑らかな曲線として表示する機能としては、効率的に形状を取り込むスプライン曲線などがあるが、シェープファイルはスプラインに対応していない。

### データ容量

.shpと.dbfファイルサイズは最大7000万ポイント相当の2GB容量制限がある。他の多角形の最大値は使用する頂点の数により異なる。

.dbfの属性データベース形式は、旧式のdBase標準に基いているため、多くの制限がある。

### 異種形式の混在

形状の種類は各レコードに保存されるので、同一ファイル内に混在して記録できるが、仕様上望ましくない。そのため、形状混合機能の使用時にはファイルヘッダーで宣言し、Null属性を混在する必要がある。ポリラインとポリゴンデータの両方を同一ファイル内に共存させることは禁じられており、例えば、井戸(point)、河川(polyline)、湖(polygon)は3つの個別ファイルに格納しなければならない。