地図アプリや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ファイルでは、ジオメトリ単体ではなくFeatureFeatureCollectionという構造でデータを格納します。

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.iohttps://geojson.io/描画・編集・エクスポートが可能。GeoJSON/TopoJSON/KML/CSV/GPXの読み込み対応
geojson.toolshttps://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以外にも地理空間データを格納するフォーマットが存在します。用途に応じて使い分けが必要です。

項目GeoJSONShapefileKMLGeoPackageTopoJSON
策定元IETFEsriOGC (Google起源)OGCMike Bostock
データ形式テキスト (JSON)バイナリ + テキストテキスト (XML)バイナリ (SQLite)テキスト (JSON)
ファイル構成単一ファイル最低3ファイル (.shp/.shx/.dbf)単一ファイル単一ファイル単一ファイル
ファイルサイズ中〜大小〜中
Web利用最適不向き対応やや不向き最適
座標系WGS 84固定任意 (.prj)WGS 84任意WGS 84
属性名の文字数制限なし10文字まで制限なし制限なし制限なし
トポロジ非対応非対応非対応対応対応(共有境界の最適化)
主な用途Web地図・APIデスクトップGISGoogle Earthモバイル・デスクトップGISD3.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に変換できます。

  1. QGISにデータを読み込む
  2. レイヤを右クリック →「エクスポート」→「地物の保存」
  3. フォーマットで「GeoJSON」を選択
  4. 座標参照系に「EPSG:4326」を指定
  5. 保存

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を扱う主要ライブラリ・ツール

ライブラリ/ツール言語・環境用途
LeafletJavaScriptWeb地図への描画
MapLibre GL JSJavaScriptベクタータイルベースのWeb地図
OpenLayersJavaScript高機能なWeb地図
D3.jsJavaScriptデータ可視化・カスタム地図描画
Turf.jsJavaScript空間演算(バッファ、交差判定など)
GeoPandasPython空間データ分析・変換
ShapelyPythonジオメトリ操作
FionaPython地理空間ファイルの読み書き
QGISデスクトップGISデータの可視化・編集・分析
GDAL/OGRコマンドラインフォーマット変換・空間処理

よくある質問

GeoJSONの読み方は?

「ジオジェイソン」と読みます。Geo(地理)+ JSON(JavaScript Object Notation)を組み合わせた名称です。

GeoJSONとJSONの違いは?

GeoJSONはJSONの仕様に加え、typegeometrycoordinatespropertiesといった地理空間データ固有のキー名と構造ルールを持ちます。あらゆる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形式で無料ダウンロードできるため、実データを使った学習もすぐに始められます。