
GeoPackage(.gpkg)とは — 1ファイルで完結するGISデータ形式と、座標系がどこに書かれているか
GeoPackage は、SQLite のデータベース1ファイルにベクタ・タイル・属性をまとめて格納する OGC 標準の地理空間データ形式です。拡張子は .gpkg。座標系は本文でもヘッダでもなく、gpkg_spatial_ref_sys という専用テーブルに行として入っています。Shapefile の .prj にあたるものが、ファイルの外ではなく中のテーブルにある——ここを押さえると、受け取った .gpkg の測地系を自分で確かめられるようになります。

Shapefile の何を置き換えるための形式か
これまでこのブログでは、形式ごとに座標系の持ち方が違うことを個別に見てきました。Shapefile の .prj は WKT を別ファイルに置き、DXF には書く場所そのものがなく、GeoJSON・KML・GPX は仕様側で座標系が固定されていました。
GeoPackage はこの系譜の中で、Shapefile の構造的な弱点を解消する目的で作られた後発の形式という位置づけになります。
| 気になる点 | Shapefile | GeoPackage |
|---|---|---|
| ファイル構成 | .shp .shx .dbf .prj などのセット |
.gpkg 1ファイル |
| 座標系の在りか | 別ファイル .prj(欠落しうる) |
ファイル内の gpkg_spatial_ref_sys テーブル |
| 属性名 | dBASE 由来で10文字までなど制約あり | SQLite の列名(実質的な制約が緩い) |
| 文字コード | 別ファイル .cpg 頼み・化けやすい |
SQLite が UTF-8 で保持 |
| 1ファイルの上限 | .shp / .dbf に2GBの壁 |
SQLite の上限(実務上は当たりにくい) |
| 中身の読み方 | 専用ライブラリ | SQLite として SQL で読める |
「セットで渡さないと壊れる」「.prj を付け忘れると測地系が分からなくなる」という、測地系が不明な座標を受け取ったときの困りごとの代表的な発生源が、構造的に減るのが最大の利点です。
座標系は gpkg_spatial_ref_sys に入っている
GeoPackage を SQLite として開くと、gpkg_ で始まる管理用テーブルが並んでいます。座標系を持っているのはこの3つです。
1. gpkg_spatial_ref_sys — 座標系の定義そのもの
このファイルで使う座標系を、1座標系につき1行で列挙するテーブルです。主な列は次のとおり。
| 列 | 中身 |
|---|---|
srs_name |
座標系の名前(人が読む用) |
srs_id |
このファイル内で座標系を指す一意の番号(主キー) |
organization |
定義元の組織名(通常は EPSG) |
organization_coordsys_id |
その組織側でのコード(EPSG コードの数値) |
definition |
座標系の定義本体(WKT の文字列) |
description |
説明 |
仕様上、次の3行は必ず存在します。
srs_id = 4326… WGS84 の緯度経度srs_id = 0… 未定義の地理座標系srs_id = -1… 未定義の直交座標系(デカルト座標系)
2. gpkg_contents — どのテーブルがどの座標系か
.gpkg の中には複数のデータテーブル(レイヤ)を入れられます。gpkg_contents は各レイヤの一覧で、行ごとに srs_id を持ちます。同じファイルの中でレイヤごとに座標系が違うことがありうる、という点は Shapefile にはなかった性質です。
3. gpkg_geometry_columns とジオメトリ本体
各レイヤのジオメトリ列がどの座標系かを gpkg_geometry_columns が持ち、さらに個々のジオメトリのバイナリ(GeoPackageBinary)のヘッダにも srs_id が埋め込まれています。つまり同じ情報が三重に書かれている構造です。
日本のデータで使う EPSG コード
organization_coordsys_id(および慣行として srs_id)に入る値は、日本のデータならおおむね次のいずれかです。
| 座標系 | EPSG |
|---|---|
| JGD2011 緯度経度(2次元) | 6668 |
| JGD2011 平面直角座標系 1〜19系 | 6669〜6687 |
| JGD2011 緯度経度+標高(3次元) | 6697 |
| JGD2000 平面直角座標系 1〜19系 | 2443〜2461 |
| WGS84 緯度経度 | 4326 |
自分の県が何系かは平面直角座標系1〜19系の早見表で確認できます。JGD2024 の EPSG 登録状況についてはJGD2024がEPSGに登録されたにまとめています。
落とし穴:ここを読み違えると座標がずれる
srs_id は EPSG コードとは限らない
多くのツールは srs_id に EPSG コードと同じ数値を入れますが、仕様上の srs_id は「このファイル内で一意な番号」でしかありません。EPSG コードそのものは organization と organization_coordsys_id の組で表されます。srs_id の数字だけを見て EPSG コードだと決めつけず、organization 側も併せて見るのが安全です。
SELECT srs_id, organization, organization_coordsys_id, srs_name
FROM gpkg_spatial_ref_sys;
srs_id が 0 や -1 のファイル=座標系不明
エクスポート元で座標系が設定されていないと、未定義を表す 0 / -1 のまま出力されます。この場合、そのファイルは座標系の情報を持っていません。数値の桁を見て「たぶん平面直角座標系だろう」と推測して変換すると、系の取り違えという最も痛い事故につながります。値の並びからどの測地系らしいかを絞り込む手順はこの座標、測地系はどれ?にまとめています。
座標の並びは x, y の順
GeoPackage のジオメトリは WKB(Well-Known Binary)で格納され、座標は x, y の順に並びます。地理座標系なら x が経度、y が緯度です。「緯度・経度」の語順に引きずられて読み取ると南北と東西が入れ替わります。形式ごとの軸順序の違いは緯度と経度、どちらを先に書く?で整理しています。
srs_id を書き換えても座標は動かない
これは GeoPackage に限らない話ですが、テーブルの srs_id を別の値に書き換えても、格納されている数値そのものは1ミリも動きません。ラベルを貼り替えただけの状態になります。座標系を変えたいのなら、値を変換したうえでラベルも合わせる——この2手が必要です。

Z 値が標高とは限らない
GeoPackage のジオメトリは Z 値を持てますが、その高さが楕円体高なのか標高なのかは、definition の座標系定義次第です。GNSS 由来のデータをそのまま入れた場合、Z は楕円体高であることが多く、標高として扱うとジオイド高のぶんだけ食い違います。変換手順は楕円体高から標高への変換を参照してください。
受け取った .gpkg の座標系を自分で確かめる
GeoPackage は SQLite なので、GIS ソフトがなくても中身を覗けます。
-- このファイルが持っている座標系の一覧
SELECT srs_id, organization, organization_coordsys_id, srs_name
FROM gpkg_spatial_ref_sys;
-- レイヤごとの座標系と範囲
SELECT table_name, data_type, srs_id, min_x, min_y, max_x, max_y
FROM gpkg_contents;
-- ジオメトリ列がどの座標系か
SELECT table_name, column_name, geometry_type_name, srs_id, z, m
FROM gpkg_geometry_columns;
gpkg_contents の min_x / min_y を見れば、値の桁からも当たりが付きます。経度・緯度なら 139.7 35.6 のような値、平面直角座標系なら原点からのメートル値(数万mのオーダー、原点の南や西では負)になります。桁が想定と違うときは、srs_id のラベルが実際の値と合っていない疑いがあります。
手元で座標を確かめたいとき
.gpkg から取り出した数値が「どの測地系のどの系か」を確かめるとき、代表点をいくつか変換してみて既知の位置と照合するのが手早い方法です。GeoConverter Pro は緯度経度と平面直角座標系19系、旧日本測地系から JGD2024 までの相互変換に対応していて、CSV での一括変換もできます。
- GeoConverter Pro: https://apps.apple.com/jp/app/geoconverter-pro/id6761740960
出典
- OGC「GeoPackage Encoding Standard」 https://www.geopackage.org/spec/
- GeoPackage「Getting Started / Implementation Guide」 https://www.geopackage.org/guidance/getting-started.html
- 国土地理院「日本測地系2011(JGD2011)」 https://www.gsi.go.jp/sokuchikijun/datum-main.html
- EPSG Geodetic Parameter Dataset https://epsg.org/
記載は2026年8月時点の公表情報に基づきます。仕様の細部・EPSG コードは各一次資料で最新の内容をご確認ください。
次に確認する
- Shapefileの.prjがWKTで座標系をどう書いているかを確認する — GeoPackage が置き換えようとした側の仕組みです
- DXFに測地系を書く場所がない理由を確認する — 「専用テーブルがある」GeoPackage との対比になります
- 座標の値から測地系を絞り込む手順を確認する — srs_id が 0 や -1 だったときの実務対応です
- 形式ごとに違う緯度・経度の軸順序を確認する — x,y 順で格納される理由と、読み違えたときの症状です
- 平面直角座標系19系がどう区切られているかを図で確認する(GeoPrism JP) — EPSG 6669〜6687 が何を指すのかを地図で見られます
- 書籍でまとめて学ぶ: 『日本の測地系Q&A』第13章「座標データの落とし穴」(Kindle Unlimited対応)
入門から通しで読むなら: 『日本の測地系がわかる本』 — 旧日本測地系から JGD2024 まで、座標がズレる理由と実務での扱いを1冊にまとめました(Kindle Unlimited 対応)
開発者より: アプリ・Kindle本・オープンソースの一覧は GitHub: amru195704 にまとめています。
お願い
本記事の情報は参考目的で掲載しており、正確性・完全性を保証するものではありません。誤記・不正確な情報がございましたら、コメント欄よりご指摘いただければ、確認のうえ修正いたします。
コメントを残す