シェープファイルとは?必要なファイルの種類と構成
シェープファイルは、Esri が1990年代初めに開発したベクター GIS 形式です。同じ名前を持つ複数のファイルの集まりで、.shp にジオメトリ、.shx にインデックス、.dbf に属性が入っています。.prj は座標系を、.cpg は文字コードを示します。FileReshape では、シェープファイルをブラウザー内で表示したり、GeoJSON、KML、GeoPackage に変換したりでき、ファイルはアップロードされません。
シェープファイルの成り立ち
Esri は1990年代初め、デスクトップ ソフト ArcView とともに、ポイント、ライン、ポリゴンを属性テーブルと一緒に保存する簡単な方法としてシェープファイルを導入しました。1998年には、ジオメトリ ファイルとインデックス ファイルの構造を記したホワイトペーパー「ESRI Shapefile Technical Description」を公開しています。仕様が公開されていて形式も単純だったため、ほかのソフトもライセンスなしで読み書きできるようになり、シェープファイルはデスクトップ GIS の共通の交換形式になりました。
これは今でもシェープファイル最大の強みです。行政のオープンデータ ポータル、測量会社、都市計画の担当部署、インフラ事業者などがシェープファイルを公開しているのは、QGIS や ArcGIS Pro から GDAL、PostGIS のローダー、多くの CAD ソフトまで、ほぼすべての GIS ソフトが読み込めるからです。一方で古さも目立ち、以下で説明する制限こそが新しい形式が生まれた理由です。
シェープファイルを構成するファイル
シェープファイルは、parcels.shp、parcels.shx、parcels.dbf のように、同じベース名を持つファイルの集まりです。そのうち3つが必須です。.shp ファイルには、各フィーチャーのジオメトリが座標の並びとして保存されています。.shx ファイルは、.shp 内の各レコードの位置を記録したインデックスで、ソフトはそれより前をすべて読まなくても5,000番目のフィーチャーに直接移動できます。.dbf ファイルは dBASE 形式の属性テーブルで、形状と同じ順番でフィーチャーごとに1行ずつ並んでいます。形状と行を結び付けているのは、この順番だけです。
それ以外のファイルは任意です。.prj ファイルには、座標系が Esri の方言による WKT(Well-Known Text)の1行として入っています。.cpg ファイルは、UTF-8 や 1252 など .dbf の文字コード名を書いただけの小さなテキストファイルです。.sbn と .sbx は Esri のソフトが使う空間インデックス、.qix は GDAL と MapServer が書き出す別の空間インデックスで、どちらも大きなファイルの描画や検索を速くするだけのものです。.shp.xml ファイルには、説明、作成者、日付などのメタデータが入っています。属性インデックス用の .atx ファイルを見かけることもあります。任意のファイルが欠けていてもデータは読み込めますが、.prj がないと位置は推測に頼ることになり、.cpg がないと特殊文字が正しく表示されないことがあります。
ベース名は、大文字・小文字を区別するシステムではそれも含めて、完全に一致している必要があります。roads.shp だけを streets.shp に名前変更すると、セットが壊れてしまいます。名前の変更、コピー、送付はすべての構成ファイルをまとめて行いましょう。いちばん簡単なのは、セット全体を .zip にまとめることです。
1つのシェープファイルにジオメトリの種類は1つ
シェープファイルはヘッダーで1つの形状タイプを宣言し、すべてのフィーチャーはそのタイプか空でなければなりません。主なタイプは Point、MultiPoint、PolyLine(ライン)、Polygon で、それぞれに通常の 2D 版、高さを表す Z 値付きの版、路線に沿った距離などの計測値を表す M 値付きの版があります。あまり使われない MultiPatch タイプは 3D の面を表します。1つのファイルにポイントとポリゴンを混在させることはできないため、建物とその入口のデータセットは2つのシェープファイルとして保存する必要があります。
ポリゴンはリングとして保存されます。公開されている仕様では、外側の境界は時計回り、穴は反時計回りで、島のある国のように複数の離れた部分を持つポリゴンは、複数のリングを持つ1つのフィーチャーになります。この形式はトポロジーを保存しません。隣り合う2つの区画はそれぞれ共有する境界を別々に保存しており、線が一致することはファイル内の何によっても保証されていません。
.dbf 属性テーブルの制限
シェープファイルの癖の多くは、1980年代にさかのぼる dBASE のテーブル形式に由来します。フィールド名は最大10文字までなので、Population_2020 は POP_2020 のような名前にする必要があり、大文字に変換するソフトもあります。テキスト フィールドには最大254文字まで入ります。フィールド数にも上限があり、一般的には255とされています。
データ型はわずかです。テキストは固定幅の文字フィールド、数値は幅と小数点以下の桁数が固定された数値フィールドまたは浮動小数点フィールド、真偽値は論理フィールド、日付は年・月・日の形の日付フィールドとして保存されます。時刻もタイムゾーンもないため、タイムスタンプはテキストとして保存するか、複数のフィールドに分ける必要があります。きちんとした null 値もありません。空の数値はソフトによって通常は空白またはゼロとして書き込まれ、本当は不明だった値を 0 と表示する読み込みソフトもあります。リスト、入れ子の値、バイナリ フィールドもありません。
ファイルサイズの制限
.shp と .shx ファイルのヘッダーはオフセットと長さを32ビットの数値で保存しているため、シェープファイルの各構成ファイル、特に .shp と .dbf は 2 GB 未満に収める必要がある、というのが一般的なルールです。GDAL など一部のソフトは、指定すれば約 4 GB までのファイルを読み書きできますが、ほかのソフトでは受け付けられないことがあります。それより大きいデータセットは、複数のシェープファイルに分けるか、別の形式で保存する必要があります。実際には .dbf が先に上限に達することがよくあります。ほとんどの値が短くても、テキスト フィールドはすべての行でその幅いっぱいを使うからです。
文字コードと .cpg ファイル
.dbf 形式は Unicode より前に生まれたものです。テキストはバイト列として保存され、ヘッダーには言語ドライバー ID と呼ばれることの多い1バイトがあり、Windows-1252 や DOS のコードページなどを指定できます。しかし、多くのソフトはこれを空のままにしたり、誤った値を設定したりします。.cpg ファイルは、文字コードをはっきり示すために後から追加されたもので、最近のソフトは UTF-8 で書き出し、そのことを示す .cpg を付けます。
.cpg もヘッダーのバイトも正しくない場合、ソフトは推測するしかなく、Malmö、Ærø、São Paulo のような名前が意味不明な記号の列になってしまいます。いわゆる文字化けですが、たいていデータ自体は壊れていません。レイヤーを開くときに GIS ソフトにどの文字コードを使うかを指定するか(QGIS ならレイヤーのプロパティなど)、正しい名前を書いた .cpg ファイルを追加してください。自分でシェープファイルを書き出すときは UTF-8 を選び、.cpg をほかの構成ファイルと一緒に保管しましょう。
座標系と .prj ファイル
.shp ファイルには、意味の説明なしに数値だけが保存されています。それは度単位の経度・緯度かもしれませんし、UTM ゾーンのメートルや、米国の州平面座標系のフィートかもしれません。どの座標参照系が当てはまるかをソフトに伝えるのは .prj ファイルだけで、しかも EPSG コードではなく WKT のテキストで記述されています。たいていのソフトは一般的な定義を EPSG コードに対応付けられますが、珍しい .prj や手で編集された .prj では、解釈がわずかに異なることがあります。
.prj がない場合、ソフトは WGS84 とみなすか、ユーザーに尋ねます。値が -180〜180 と -90〜90 の範囲にあれば、おそらく度単位です。数十万や数百万といった大きな値は、投影座標系のメートルやフィートです。座標系の割り当ては、データにラベルを付けるだけです。投影変換では実際に座標が再計算されます。この2つを混同しないようにしましょう。
シェープファイルに代わる形式
GeoPackage は Open Geospatial Consortium(OGC)のオープン標準で、1つの .gpkg ファイルに収めた SQLite データベースを基盤としています。複数のレイヤー、長いフィールド名、きちんとした日付と時刻、null 値、大きなデータセットを扱え、QGIS の既定の形式でもあります。プロジェクト全体を引き渡すのに適しています。GeoJSON は RFC 7946 として標準化されたプレーンテキストの JSON 形式です。テキストエディターで読みやすく、ウェブ地図や API にとって自然な形式ですが、標準では WGS84 の座標が前提で、ファイルは大きくなります。FlatGeobuf は空間インデックスを内蔵した新しい単一ファイルのバイナリ形式で、高速な読み込みとウェブ経由のストリーミングを想定して設計されています。対応は広がっていますが、ほかの形式ほどどこでも使えるわけではありません。
どの形式もすべての場面に最適というわけではありません。受け取る側がどのソフトを使っているかわからない場合や、システムや取引先がシェープファイルを明示的に求めている場合は、今でもシェープファイルがいちばん無難です。フィールド名の短縮、タイムスタンプの欠落、2 GB に近いファイルサイズなど、その制限が支障になる場合は、GeoPackage に変換するのがたいていいちばん手間の少ない方法です。
FileReshape を使ってブラウザーでシェープファイルを扱う
FileReshape のシェープファイル ツールは、ウェブ用にコンパイルされた GDAL で構成ファイルを読み込むため、ファイルはお使いのデバイス上で処理され、アップロードされません。「シェープファイル ビューア」は、フィーチャーを地図に、属性テーブルを各フィールドの型とともに表示します。「シェープファイル(SHP)を GeoJSON に変換」「シェープファイル(SHP)を KML に変換」「シェープファイルを GeoPackage に変換」は、同じデータをそれぞれの形式で書き出します。GeoJSON と KML は WGS84 で書き出され、GeoPackage は元の座標系を保持します。「KML を SHP(シェープファイル)に変換」はその逆で、.shp、.shx、.dbf、.prj、.cpg ファイルを含む .zip を、ジオメトリの種類ごとに1つのシェープファイルとして書き出します。.zip をドロップしても、構成ファイルをまとめて選択しても構いません。なお、すでに10文字に短縮されたフィールド名は、どんな変換でも元に戻せません。
よくある質問
シェープファイルで必須のファイルはどれですか?
.shp、.shx、.dbf ファイルが必須です。.prj と .cpg ファイルは任意ですがあったほうがよく、.sbn、.sbx、.qix、.shp.xml はインデックスやメタデータなので省いても構いません。
1つのシェープファイルにポイント、ライン、ポリゴンを一緒に入れられますか?
いいえ。各シェープファイルのヘッダーには形状タイプが1つだけ記録されています。混在したデータは、種類ごとに1つのシェープファイルに分けるか、GeoPackage や GeoJSON などの形式で保存する必要があります。
シェープファイルでアクセント付きの文字が文字化けするのはなぜですか?
ソフトが誤った文字コードで .dbf を読み込んだためです。レイヤーを開くときに正しい文字コードを選ぶか、UTF-8 や 1252 など正しい名前を書いた .cpg ファイルを追加してください。
シェープファイルに日付と時刻を保存できますか?
日付は保存できますが、時刻は保存できません。タイムスタンプは代わりにテキスト フィールドとして保存するか、きちんとした日付時刻型を持つ GeoPackage にデータを移すのが一般的です。
シェープファイルはオープンな形式ですか?
ジオメトリ ファイルとインデックス ファイルは Esri が1998年に公開した技術仕様書に記載されており、属性テーブルには広く知られた dBASE 形式が使われているため、多くの無料ソフトや商用ソフトがシェープファイルを読み書きできます。