GeoJSONビューア - 地図表示・構文チェック

GIS・地理ツール

GeoJSONを地図に描画し、RFC 7946 への適合を検証するオンラインバリデータです。リングの閉じ、巻き方向、座標の範囲に加え、宣言された bbox とデータの整合まで確認します。処理はすべてブラウザ内で行われます。

属性

地図上の図形をクリックすると、そのフィーチャの属性が表示されます。

GeoJSON ガイド

使い方

テキストエリアにGeoJSONを貼り付けて「地図に表示」を押します。正しい入力は地図に描画され、スペース2つのインデントで整形されます。下のバリデーションの内容にそってエラーや警告を表示します。図形をクリックすると、そのフィーチャの属性を確認できます。bbox が書かれている場合は、オレンジの破線で地図に重ねて表示します。入力欄の内容は消えないので、そのまま直せます。

GeoJSONの9つの型

Point

単一の座標。

{ "type": "Point", "coordinates": [139.7, 35.68] }

MultiPoint

座標の配列。

{
  "type": "MultiPoint",
  "coordinates": [[139.7, 35.68], [135.5, 34.7]]
}

LineString

2点以上を結んだ線。

{
  "type": "LineString",
  "coordinates": [[139.7, 35.68], [135.5, 34.7]]
}

MultiLineString

LineString の配列。

{
  "type": "MultiLineString",
  "coordinates": [
    [[139.70, 35.69], [139.77, 35.71]],
    [[139.70, 35.66], [139.77, 35.65]]
  ]
}

Polygon

1つ以上の閉じたリング。最初のリングが外周、2つ目以降は穴を表します。

{
  "type": "Polygon",
  "coordinates": [
    [
      [139.7, 35.6], [139.8, 35.6],
      [139.8, 35.7], [139.7, 35.7],
      [139.7, 35.6]
    ]
  ]
}

MultiPolygon

Polygon の配列。

{
  "type": "MultiPolygon",
  "coordinates": [
    [
      [
        [139.7, 35.6], [139.8, 35.6],
        [139.8, 35.7], [139.7, 35.7],
        [139.7, 35.6]
      ]
    ],
    [
      [
        [139.82, 35.6], [139.92, 35.6],
        [139.92, 35.7], [139.82, 35.7],
        [139.82, 35.6]
      ]
    ]
  ]
}

GeometryCollection

型の異なるジオメトリをまとめた集合。

{
  "type": "GeometryCollection",
  "geometries": [
    { "type": "Point", "coordinates": [139.70, 35.66] },
    {
      "type": "LineString",
      "coordinates": [
        [139.74, 35.68], [139.77, 35.71]
      ]
    }
  ]
}

Feature

ジオメトリに属性(properties)を組にしたもの。properties には名前や人口、分類など、図形そのものではない情報を自由に入れられます。地図上の図形をクリックすると中身が表示されます。

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [139.7, 35.68]
  },
  "properties": { "name": "Tokyo" }
}

FeatureCollection

Feature の配列。1つのGeoJSONに複数の図形を入れるときは features に並べます。実データの最上位としてもっともよく使われます。

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [139.7, 35.68]
      },
      "properties": { "name": "東京" }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [135.5, 34.7]
      },
      "properties": { "name": "大阪" }
    }
  ]
}

bbox(範囲)について

bbox は、データ全体を囲む矩形です。座標を全部読まなくても、そのデータがどの範囲に収まるかを把握できます。ジオメトリを編集するとずれるので、bbox は手で書かずにデータから計算することをおすすめします。書き方は [西, 南, 東, 北] の4つ、3次元なら [西, 南, 最低高度, 東, 北, 最高高度] の6つです。必須ではなく、FeatureCollection・Feature・ジオメトリのどれにも付けられます。このページでは bbox をオレンジの破線で地図に重ねて表示します。

{
  "type": "Polygon",
  "bbox": [139.7, 35.6, 139.8, 35.7],
  "coordinates": [
    [
      [139.7, 35.6], [139.8, 35.6],
      [139.8, 35.7], [139.7, 35.6]
    ]
  ]
}

使うときのコツ

  • 構文エラーで多いのは、末尾の余分なカンマ、ダブルクォートではなくシングルクォート、キーのクォート忘れです。エラーメッセージが何文字目で失敗したかを示すので、そこから読むと早く見つかります。
  • 図形が想定と違う場所に描画されたときは、まず経度と緯度の順序を疑ってください。GeoJSON は [経度, 緯度] の順ですが、地図アプリの多くは「緯度, 経度」で表示するため、コピーすると入れ替わります。日本の座標なら緯度が90を超えてエラーになりますが、どちらも±90に収まる地域では入れ替わったまま通ってしまいます。
  • 平面直角座標系などの投影座標系のデータは、変換してからでないと正しい位置に描画されません。

バリデーションの内容

地図に表示するたびに、RFC 7946 に沿っているかを確認します。仕様に反していて描けないものをエラー、描けるけれど直したほうがよいものを警告として分けて表示します。検証はすべてブラウザ内で行われ、サーバーには何も送られません。

エラー

  • JSONとして解析できない。
  • type がその場所に書けない型になっている。いちばん外側は9種類のGeoJSONの型のいずれか、入れ子のジオメトリは Feature と FeatureCollection を除く7つのいずれかである必要があります。
  • 座標1点が数値の組になっていない。座標であるべきところが空の配列、数値が1つだけ、文字列で書かれた数値など。
  • 座標が経度±180・緯度±90の範囲を超えている。[緯度, 経度] の順で書かれたデータもここで見つかります。
  • coordinates の入れ子の深さが、ジオメトリの型と合っていない。または枝によって揃っていない。
  • 必須のメンバーが無い。
  • リングや線の座標が足りない。ポリゴンのリングは4つ以上、線は2つ以上必要です。

警告

  • リングが閉じていない。最初と最後の座標が一致していません。
  • リングが右手の法則に従っていない。外周は反時計回り、穴は時計回りが正しい向きです。
  • 座標の3つ目が数値でない。3つ目は高度で、書くかどうかは自由ですが、書くなら数値である必要があります。
  • bbox がおかしい。読み取れない、南が北より上にある、データがはみ出している、のいずれかです。
  • 属性がおかしい。Feature に properties が無い、id が文字列でも数値でもない、同じ属性がフィーチャによって数値だったり文字列だったりする、のいずれかです。
  • GeometryCollection の中に GeometryCollection が入っている。仕様では入れ子を避けることが推奨されています。
  • crs が書かれている。RFC 7946 はこれを廃止して座標をWGS84に固定したため、別の座標系で記録されている可能性があります。

用語集

RFC 7946
GeoJSON を定義する仕様。座標参照系を WGS84 に、座標の順序を経度・緯度に固定し、型をちょうど9種類と定めています。2008年の草案に沿って作られた古いデータは、別の座標系を使っていることがあります。
CRS(座標参照系)
数値の組がどこを指すかを決める取り決めです。同じ [139.7, 35.68] でも、どのCRSで読むかによって指す場所が変わります。2008年のGeoJSONには crs メンバーがあり、任意のCRSを宣言できましたが、RFC 7946 はこれを廃止してWGS84に一本化しました。そのため crs が書かれたデータは仕様より前のもので、座標がWGS84でない可能性があります。
WGS84
RFC 7946 がすべての座標に固定している測地系で、GPSが返すのも地図サービスが前提にするのもこれです。測地系とは座標系を地球のどこに固定するかの取り決めで、これが違うと同じ緯度経度が別の場所を指します。値を見ても分かりません。古い測地系の座標も経度±180・緯度±90に普通に収まったまま、数百メートルずれた位置に描画されます。
右手の法則
ポリゴンのリングを回る向きのことです。RFC 7946 は外周を反時計回り、穴を時計回りと定めています。MapLibre や Leaflet は逆向きでも描くので、地図の上では違いが出ません。向きを見るのは取り込む側で、Elasticsearch の geo_shape は逆向きのポリゴンを日付変更線をまたぐものと解釈します。

よくある質問

Q: 貼り付けたGeoJSONはサーバーに送信されますか?
A: 送信されません。解析・検証・描画はすべてブラウザ内で行われます。
Q: 「JSONとしては正しいですが、GeoJSONではありません」と出るのはなぜ?
A: JSONとしては解析できたものの、type が無いか、9種類のGeoJSONの型のいずれでもない場合に出ます。たとえば {"a":1} はJSONとしては正しくても GeoJSON ではありません。
Q: バリデーションでは何をチェックしていますか?
A: エラーとして扱い描画しないのは、JSONとして解析できないもの、type がその場所に書けない型になっているもの、座標が数値の組になっていないものや経度±180・緯度±90の範囲を超えているもの、coordinates の入れ子の深さが型と合わないもの、必須のメンバーが無いもの、リングや線の座標が足りないものです。警告として表示しつつ描画するのは、リングが閉じていない場合、右手の法則に従っていない場合、bbox が読み取れない場合と bbox の外にデータがはみ出している場合です。座標の精度は検証していません。上の「バリデーションの内容」に1つずつ挙げています。
Q: GeoJSONは緯度と経度のどちらを先に書きますか?
A: 経度が先です。RFC 7946 は最初の2つを「経度、緯度の順でなければならない」と定めており、bbox も同じ並びで [西, 南, 東, 北] の順です。Google マップなど多くの地図が「緯度, 経度」で見せるため逆に覚えやすいところですが、GeoJSON では必ず経度を先に書きます。日本の座標は経度が122〜154なので、逆に書くと緯度が90を超えてエラーになります。

関連ツール & ゲーム