GeoJSON標準徹底解説:地理空间データのためのRFC 7946マスターガイド
Webマッピングや地理情報システム (GIS) の世界において、GeoJSON は空間データを共有するための世界共通語となっています。Leaflet、Mapbox、Google Mapsのいずれを使用している場合でも、おそらく公式なGeoJSON標準である RFC 7946 を利用しているはずです。
RFC 7946 (GeoJSON) とは?
2016年に公開された RFC 7946 は、GeoJSONフォーマットを正式に規定したものです。これはJSON (JavaScript Object Notation) に基づく地理空間データ交換フォーマットであり、幾何学図形(ジオメトリ)、地物(フィーチャ)、およびそれらの集合を表現することができます。
GeoJSONは以下のジオメトリタイプをサポートしています:
- Point (点): 単一の位置(経度、緯度)。
- LineString (線): 連続した複数の点。
- Polygon (面): 閉じられた領域(始点と終点が同じ)。
- MultiPoint, MultiLineString, MultiPolygon: 上記タイプの集合。
- GeometryCollection: 異なるジオメトリタイプの混在。
GeoJSONの核心原理
1. 座標系
RFC 7946 では、WGS 84 (世界測地系1984) の使用が厳密に義務付けられています。座標は常に [経度, 緯度] の順序で記述します。 警告:多くの開発者が [緯度, 経度] と書き間違えますが、これを行うとデータが地球上の全く別の場所に表示されてしまいます!
2. フィーチャオブジェクト
GeoJSONの Feature オブジェクトは、ジオメトリと追加のメタデータ(プロパティ)を保持します。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [102.0, 0.5]
},
"properties": {
"name": "Dinagat Islands"
}
}
3. フィーチャコレクション (FeatureCollection)
ほとんどのGeoJSONファイルは FeatureCollection オブジェクトであり、複数のフィーチャを一つのファイルにまとめることができます。
実践的な活用シーン
Webマッピング
GeoJSONは、ほとんどのモダンなWebマッピングライブラリのネイティブフォーマットです。AJAX経由で簡単にロードでき、properties オブジェクトに基づいて動的にスタイルを設定できます。
データベースストレージ
PostgreSQL (PostGIS) や MongoDB などのモダンなデータベースはGeoJSONをネイティブにサポートしており、「この場所から5km以内のすべての点を検索する」といった空間クエリを実行できます。
データビジュアライゼーション
D3.js などのツールは、GeoJSONデータを取り込んでインタラクティブなSVGマップとしてレンダリングでき、ダッシュボードやインフォグラフィックに最適です。
GeoJSON vs. KML vs. Shapefile
| 特徴 | GeoJSON | KML | Shapefile |
|---|---|---|---|
| フォーマット | JSON | XML | バイナリ(複数ファイル) |
| Web親和性 | 非常に高い | 普通 | 低い |
| スタイル設定 | プロパティ経由 | 内蔵 (XML) | 別ファイル (.qml/.sld) |
| 可読性 | はい | はい | いいえ |
よくある質問 FAQ
Q: なぜ [緯度, 経度] ではなく [経度, 緯度] なのですか?
A: RFC 7946 は、経度がX軸、緯度がY軸に対応する標準的なデカルト座標系 [x, y] に従っているためです。
Q: 異なる座標参照系 (CRS) を使用できますか?
A: 旧バージョンのGeoJSONではカスタムCRSが可能でしたが、RFC 7946 では WGS 84 が厳密に要求されます。UTMなどの別の座標系のデータがある場合は、GeoJSONとして共有する前に WGS 84 に投影変換する必要があります。
Q: 大規模なデータセットはどう扱えばいいですか?
A: 非常に大きな空間データセットの場合、GeoJSONはロードが遅くなることがあります。その場合は、トポロジを共有してファイルサイズを削減する TopoJSON や、プロダクションレベルのマッピングに適した ベクトルタイル (MVT) の使用を検討してください。