地図アプリやWebサービスで位置情報を扱う場面が増えています。そのとき標準的に使われるデータ形式がGeoJSONです。
GeoJSONは、地理空間上の点・線・面とその属性情報を、人間にも機械にも読みやすいJSON形式で記述するオープン標準規格です。2016年8月にIETF(Internet Engineering Task Force)がRFC 7946として正式に策定しました(出典: IETF RFC 7946)。
Web地図ライブラリ(Leaflet・MapLibre GL JS・OpenLayers)、デスクトップGIS(QGIS)、クラウドGIS(ArcGIS Online)など主要ツールがネイティブ対応しており、地理空間データ交換の事実上の共通言語として機能しています。
GeoJSONの基本仕様
RFC 7946で定められた要件
GeoJSONの公式仕様であるRFC 7946「The GeoJSON Format」は、以下の要件を定めています。
| 項目 | 内容 |
|---|---|
| 策定機関 | IETF(Internet Engineering Task Force) |
| RFC番号 | RFC 7946 |
| 発行年月 | 2016年8月 |
| MIMEタイプ | application/geo+json |
| 座標参照系 | WGS 84(EPSG:4326) |
| 座標順序 | 経度(longitude), 緯度(latitude) の順 |
| 高さ情報 | オプションの第3要素(楕円体高、単位はメートル) |
座標順序が「経度, 緯度」である点は、一般的な「緯度, 経度」の感覚とは逆になるため注意が必要です。
JSONとの関係
GeoJSONはJSON(JavaScript Object Notation)のサブセットです。そのため、あらゆるプログラミング言語の標準JSONパーサーでそのまま読み書きできます。XMLベースのGMLやKMLと比べてパース処理が軽量で、Web APIのレスポンスとして直接返却できる点が大きな利点です。
7つのジオメトリタイプ
GeoJSONでは7種類のジオメトリ(図形)を定義しています。
点を表すタイプ
Point — 単一の座標点です。店舗の所在地やセンサーの設置位置など、1つの地点を示す場合に使います。
{
"type": "Point",
"coordinates": [139.6917, 35.6895]
}
MultiPoint — 複数の座標点をひとまとめにしたものです。同じカテゴリに属する複数地点(例: チェーン店の全店舗)を1つのフィーチャとして扱えます。
{
"type": "MultiPoint",
"coordinates": [
[139.6917, 35.6895],
[135.5023, 34.6937]
]
}
線を表すタイプ
LineString — 2つ以上の座標を結んだ折れ線です。道路、河川、鉄道路線などの表現に適しています。
{
"type": "LineString",
"coordinates": [
[139.7454, 35.6586],
[139.7024, 35.6762],
[139.6917, 35.6895]
]
}
MultiLineString — 複数の折れ線を1つのフィーチャとして格納します。接続されていない複数の道路区間を1つにまとめる場合などに使います。
面を表すタイプ
Polygon — 閉じた領域を表します。最初と最後の座標が一致する座標配列(リニアリング)で構成されます。行政区域の境界、建物のフットプリント、公園の範囲などに使われます。
{
"type": "Polygon",
"coordinates": [[
[139.74, 35.68],
[139.76, 35.68],
[139.76, 35.66],
[139.74, 35.66],
[139.74, 35.68]
]]
}
Polygonは穴(ホール)を持つことも可能です。外周リングに続いて内側のリングを追加すると、ドーナツ状の領域を表現できます。
MultiPolygon — 飛び地を持つ行政区域や、離島を含む都道府県境など、離れた複数の面を1つのフィーチャとして扱う場合に使います。
混合タイプ
GeometryCollection — 上記のジオメトリタイプを混在させて1つのオブジェクトに格納できます。ただし実務では、異なるジオメトリタイプは別々のFeatureとしてFeatureCollectionにまとめるほうが扱いやすく、GeometryCollectionの使用頻度は低いです。
FeatureとFeatureCollectionの構造
実際のGeoJSONファイルでは、ジオメトリ単体ではなくFeatureやFeatureCollectionという構造でデータを格納します。
Feature
Featureは「1つの地物」を表すオブジェクトで、geometry(図形) と properties(属性情報) をセットで持ちます。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [139.7671, 35.6812]
},
"properties": {
"name": "東京駅",
"opened": 1914,
"lines": 16
}
}
propertiesには任意のキー・値ペアを自由に格納できます。数値、文字列、配列、ネストしたオブジェクトなど、JSONで表現可能なデータ型がすべて使えます。
FeatureCollection
FeatureCollectionは複数のFeatureを配列としてまとめた構造で、一般的なGeoJSONファイルの最上位オブジェクトです。
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [139.7671, 35.6812]
},
"properties": { "name": "東京駅" }
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [135.4959, 34.7024]
},
"properties": { "name": "大阪駅" }
}
]
}
GeoJSONファイルの開き方・表示方法
GeoJSONファイルは拡張子 .geojson または .json で保存されます。開く方法は複数あります。
テキストエディタで開く
GeoJSONは単なるテキストファイルです。VS Code、Sublime Text、サクラエディタなどのテキストエディタで直接開いてJSONの中身を確認・編集できます。VS Codeには構文ハイライトやフォーマット整形機能もあるため、手軽にデータの中身を確認したい場合に便利です。
オンラインビューアで地図上に表示する
ブラウザだけで即座にGeoJSONを可視化できるオンラインツールがあります。
| ツール名 | URL | 特徴 |
|---|---|---|
| geojson.io | https://geojson.io/ | 描画・編集・エクスポートが可能。GeoJSON/TopoJSON/KML/CSV/GPXの読み込み対応 |
| geojson.tools | https://geojson.tools/ | 軽量なビューア。URLからの読み込みに対応 |
| 地理院地図 | https://maps.gsi.go.jp/ | 国土地理院の地図上にGeoJSONをドラッグ&ドロップで表示可能 |
GISソフトウェアで開く
QGIS(無料・オープンソース)は、GeoJSONファイルをドラッグ&ドロップで読み込めます。属性テーブルの閲覧、スタイルの変更、他フォーマットへの変換なども可能です。
ArcGIS OnlineでもGeoJSONのインポートに対応しています。Webブラウザ上で地図レイヤーとして追加できます。
プログラミング言語から読み込む
Python(GeoPandas)の場合:
import geopandas as gpd
gdf = gpd.read_file("data.geojson")
print(gdf.head())
# 地図に描画
gdf.plot()
JavaScript(Leaflet)の場合:
fetch("data.geojson")
.then(response => response.json())
.then(data => {
L.geoJSON(data).addTo(map);
});
地理空間フォーマットの比較
GeoJSON以外にも地理空間データを格納するフォーマットが存在します。用途に応じて使い分けが必要です。
| 項目 | GeoJSON | Shapefile | KML | GeoPackage | TopoJSON |
|---|---|---|---|---|---|
| 策定元 | IETF | Esri | OGC (Google起源) | OGC | Mike Bostock |
| データ形式 | テキスト (JSON) | バイナリ + テキスト | テキスト (XML) | バイナリ (SQLite) | テキスト (JSON) |
| ファイル構成 | 単一ファイル | 最低3ファイル (.shp/.shx/.dbf) | 単一ファイル | 単一ファイル | 単一ファイル |
| ファイルサイズ | 中〜大 | 中 | 大 | 小〜中 | 小 |
| Web利用 | 最適 | 不向き | 対応 | やや不向き | 最適 |
| 座標系 | WGS 84固定 | 任意 (.prj) | WGS 84 | 任意 | WGS 84 |
| 属性名の文字数 | 制限なし | 10文字まで | 制限なし | 制限なし | 制限なし |
| トポロジ | 非対応 | 非対応 | 非対応 | 対応 | 対応(共有境界の最適化) |
| 主な用途 | Web地図・API | デスクトップGIS | Google Earth | モバイル・デスクトップGIS | D3.jsなどでの可視化 |
TopoJSONとの使い分け
TopoJSONはGeoJSONの派生フォーマットで、隣接するポリゴン間の共有境界線を「アーク(arc)」として一度だけ記録します。これにより、行政区域のように隣接面が多いデータではファイルサイズが50〜80%削減される場合があります。D3.jsを用いたコロプレスマップ(階級区分図)の描画では、TopoJSONの採用が一般的です。
ただし、TopoJSONはRFCなどの公式標準ではなく、対応ツールもGeoJSONほど多くありません。Web上でデータを軽量に配信したい場面ではTopoJSON、API間のデータ交換や汎用的な利用にはGeoJSONが適しています。
国土地理院・国土数値情報でのGeoJSON活用
日本では国や自治体がGeoJSON形式のオープンデータを提供しており、誰でも無料で利用できます。
国土数値情報ダウンロードサービス
国土交通省が運営する国土数値情報ダウンロードサービスでは、行政区域、道路、鉄道、河川、土地利用など多種多様な地理空間データをGeoJSON形式でダウンロードできます。データ基準年は最新で2025年版(令和7年版)が提供されています。
ダウンロードしたzipファイルを解凍すると、.geojsonファイルが含まれています。QGISにドラッグ&ドロップするか、PythonのGeoPandasで読み込むことで即座に利用できます。
地理院地図での読み込み
国土地理院が提供する地理院地図は、画面上にGeoJSONファイルをドラッグ&ドロップするだけで表示できます。作図機能でGeoJSONを出力することも可能です(出典: 国土地理院 作図・ファイル機能)。
GeoJSONの作成方法
テキストエディタで手書きする
GeoJSONは人間が読み書きできる形式のため、シンプルなデータならテキストエディタで直接記述できます。座標値はGoogle Mapsで右クリック → 座標コピーなどで取得可能です(Google Mapsの座標は「緯度, 経度」の順なので、GeoJSONに記述する際は順序を入れ替えて「経度, 緯度」にする必要があります)。
geojson.ioで作成する
geojson.ioは、ブラウザ上でGeoJSONを視覚的に作成できるオンラインエディタです。地図上にマーカー(点)、ポリライン(線)、ポリゴン(面)を描画すると、リアルタイムでGeoJSONコードが生成されます。作成したデータはGeoJSON、TopoJSON、KML、CSV、Shapefileなどの形式でエクスポートできます。
QGISで変換・作成する
QGISではShapefileやCSV(緯度・経度列を含むもの)をGeoJSONに変換できます。
- QGISにデータを読み込む
- レイヤを右クリック →「エクスポート」→「地物の保存」
- フォーマットで「GeoJSON」を選択
- 座標参照系に「EPSG:4326」を指定
- 保存
Pythonスクリプトで生成する
import json
geojson = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [lon, lat]
},
"properties": {
"name": name,
"category": category
}
}
for lon, lat, name, category in data_list
]
}
with open("output.geojson", "w", encoding="utf-8") as f:
json.dump(geojson, f, ensure_ascii=False, indent=2)
Pythonの標準ライブラリjsonだけで生成可能です。外部パッケージは不要なため、環境構築の手間がかかりません。
GeoJSONのバリデーション
作成したGeoJSONファイルが仕様に準拠しているか検証する方法があります。
オンラインバリデータ:
- geojsonlint.com — GeoJSONを貼り付けるだけでRFC 7946準拠チェックが実行されます
- geojson.io — エディタ上で不正なGeoJSONはエラー表示されます
コマンドラインツール:
# Node.jsを使用する場合
npx geojsonhint data.geojson
# Pythonを使用する場合
pip install geojson
python -c "import geojson; print(geojson.is_valid(geojson.load(open('data.geojson'))))"
よくあるバリデーションエラー:
- 座標順序の誤り(緯度・経度が逆)
- Polygonの最初と最後の座標が一致していない
typeキーのスペルミス- 座標値が文字列型になっている(数値型が正しい)
GeoJSONを扱う主要ライブラリ・ツール
| ライブラリ/ツール | 言語・環境 | 用途 |
|---|---|---|
| Leaflet | JavaScript | Web地図への描画 |
| MapLibre GL JS | JavaScript | ベクタータイルベースのWeb地図 |
| OpenLayers | JavaScript | 高機能なWeb地図 |
| D3.js | JavaScript | データ可視化・カスタム地図描画 |
| Turf.js | JavaScript | 空間演算(バッファ、交差判定など) |
| GeoPandas | Python | 空間データ分析・変換 |
| Shapely | Python | ジオメトリ操作 |
| Fiona | Python | 地理空間ファイルの読み書き |
| QGIS | デスクトップ | GISデータの可視化・編集・分析 |
| GDAL/OGR | コマンドライン | フォーマット変換・空間処理 |
よくある質問
GeoJSONの読み方は?
「ジオジェイソン」と読みます。Geo(地理)+ JSON(JavaScript Object Notation)を組み合わせた名称です。
GeoJSONとJSONの違いは?
GeoJSONはJSONの仕様に加え、type、geometry、coordinates、propertiesといった地理空間データ固有のキー名と構造ルールを持ちます。あらゆるJSONパーサーで読めますが、地理空間データとして正しく処理するにはGeoJSON対応のライブラリが必要です。
ファイルサイズが大きい場合の対策は?
GeoJSONはテキスト形式のため、座標精度が高いデータや大量のフィーチャを含むファイルはサイズが膨らみがちです。対策として以下の方法があります。
- 座標精度の削減: 小数点以下6桁(約0.1m精度)で十分な場合が多いです
- TopoJSONへの変換: 共有境界の最適化でサイズ削減
- GeoPackageやFlatGeobufへの移行: バイナリ形式で大幅に軽量化
- gzip圧縮: HTTPレスポンスのContent-Encoding: gzipで転送量を削減
- タイルベースの配信: 大規模データはベクタータイル化して必要な範囲だけ配信
Shapefileからの変換方法は?
QGISのエクスポート機能、GDALのogr2ogrコマンド、PythonのGeoPandasで変換できます。
# ogr2ogrで変換
ogr2ogr -f GeoJSON output.geojson input.shp
# GeoPandasで変換
import geopandas as gpd
gdf = gpd.read_file("input.shp")
gdf.to_file("output.geojson", driver="GeoJSON")
まとめ
GeoJSONは、RFC 7946で標準化された地理空間データのJSON表現形式です。テキストベースで人間にも読みやすく、Web APIとの親和性が高いことから、Web地図開発やオープンデータ配信の場面で広く使われています。
7つのジオメトリタイプ(Point・MultiPoint・LineString・MultiLineString・Polygon・MultiPolygon・GeometryCollection)で点・線・面を表現し、FeatureのpropertiesにはJSON形式で任意の属性情報を格納できます。
ファイルの確認はテキストエディタやgeojson.ioで手軽に行え、QGISやGeoPandasで高度な分析も可能です。国土数値情報ダウンロードサービス(https://nlftp.mlit.go.jp/ksj/)からは行政区域や交通データなどをGeoJSON形式で無料ダウンロードできるため、実データを使った学習もすぐに始められます。