【GeoJSONとは?】世界地図や国土地理情報をJSONデータ形式で使ってみる

code

地図や地理情報を使うときによく聞くGeoJSONというデータについてご紹介していきます。

GeoJSONとは?

GeoJSONは、JavaScript Object Notation (JSON) を用いて空間データをエンコードし非空間属性を関連付けるファイルフォーマット。
属性にはポイント(住所や座標)、ライン(各種道路や境界線)、 ポリゴン(国や地域)などが含まれる。
他のGISファイル形式との違いとして、Open Geospatial Consortiumではなく世界各地の開発者達が開発し管理している点で異なる。
TopojsonはGeoJSONに影響され開発された。

https://ja.wikipedia.org/wiki/GeoJSON

ざっくり言うと、地理情報が入ったJSONのデータ形式です。

GeoJSONデータの構造

GeoJSONは、様々な地理的データ構造をエンコードするためのフォーマットです。

サンプルデータ

{
  "type": "FeatureCollection", // フィーチャーコレクションオブジェクトを指定
  "features": [                // featuresプロパティは地物の配列
    {
      "type": "Feature", // フィーチャーオブジェクトを指定
      "properties": {   // 属性を表現するハッシュ
        "label": "私の家"
    },
      "geometry": {      // ジオメトリ(形状)
        "type": "Point", //  ジオメトリオブジェクトを指定
        "coordinates": [
          138.603515625,
          36.10237644873644
        ]
      }
    }
  ]
}

GeoJSONオブジェクト

GeoJSONオブジェクトは

  1. ジオメトリ (形状)
  2. フィーチャー (地物)
  3. フィーチャーの集まり

を表現します。

"type" プロパティで、GeoJSON オブジェクトの種類を決めます。

1. ジオメトリオブジェクト

"type": "Point", // ジオメトリオブジェクトを指定

点(Point)や、線(LineString)、多角形(Polygon)といった図形を「ジオメトリオブジェクト(Geometry Object)」として表現します。

"type"プロパティのメンバーの値

typeデータ形式の例
Point

{ “type”: “Point”,
“coordinates”: [30, 10] }
LineString
{ “type”: “LineString”,
“coordinates”: [ [30, 10], [10, 30], [40, 40]] }
Polygon
多角形
{ “type”: “Polygon”,
“coordinates”: [[[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]]] }
{ “type”: “Polygon”,
“coordinates”:
[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]],
[[20, 30], [35, 35], [30, 20], [20, 30]]] }
MultiPoint
複数の点
{ “type”: “MultiPoint”,
  “coordinates”: [ [10, 40], [40, 30], [20, 20], [30, 10]] }
MultiLineString
複数の線
{ “type”: “MultiLineString”,
“coordinates”:
[[[10, 10], [20, 20], [10, 40]],
[[40, 40], [30, 30], [40, 20], [30, 10]]] }
MulitPolygon
複数の多角形
{“type”: “MultiPolygon”,
“coordinates”:
[[[[30, 20], [45, 40], [10, 40], [30, 20]]],
[[[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]]] }
{ “type”: “MultiPolygon”,
“coordinates”:
[[[[40, 40], [20, 45], [45, 30], [40, 40]]],
[[[20, 35], [10, 30], [10, 10], [30, 5], [45, 20], [20, 35]], [[30, 20], [20, 15], [20, 25], [30, 20]]]] }

使い方は後ほど説明しますが、http://geojson.io/ を使っていただくとイメージしやすいかと思います。

これが何の座標なのか?を表すには、その場所の情報を追加するには「フィーチャーオブジェクト(Feature Objest)」を使います。

2. フィーチャーオブジェクト

"type": "Feature", // フィーチャーオブジェクトを指定
  • geometry:位置情報(ジオメトリオブジェクト)
  • properties:その座標に関する情報を定義します。
    好きな情報を定義できます。ここでは場所の名称をlabelとしています。
"features": [          // featuresプロパティは地物の配列
  {
    "type": "Feature", // フィーチャーオブジェクトを指定
    "properties": {   // 属性を表現するハッシュ
      "lable": "私の家"
   },
    "geometry": {      // ジオメトリ(形状)
      "type": "Point", //  ジオメトリオブジェクトを指定
      "coordinates": [
        138.603515625,
        36.10237644873644
      ]
    }
  }

3. フィーチャーコレクションオブジェクト

"type": "FeatureCollection", // フィーチャーコレクションオブジェクトを指定

ひとつのGeoJSON内で複数の空間データを定義するには、「フィーチャーコレクションオブジェクト」を使います。

中にはフィーチャーオブジェクトが入っています。

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [
          138.9990234375,
          35.85343961959182
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {},
      "geometry": {
        "type": "Point",
        "coordinates": [
          140.2294921875,
          36.84446074079564
        ]
      }
    }
  ]
}

簡単にGeoJSONデータ情報を入手する方法

”geojson.io” エディタで操作できるWebサービス

色々なGeoJSONデータが公開されているので、ダウンロードしてみることができます。

http://geojson.io/

geojson.io

地理空間情報(GeoJSON)の作成・編集・共有が行えるWebサービスです。 エディタを使ってマーカーの設置や、ライン(線)、ポリゴン(面)情報を作成し属性情報の編集などを行うことができます。

このように、マウスを使って自分で色々なジオメトリオブジェクトを配置して、GeoJSONデータで出力してみることができます。

国土数値情報ダウンロードサービスを使う

国土交通省国土政策局国土情報課が提供しているデータを使うこともできます。

国土数値情報 ダウンロードサービス

http://nlftp.mlit.go.jp/ksj/

http://nlftp.mlit.go.jp/ksj/

「国土数値情報」とは、国土形成計画、国土利用計画の策定等の国土政策の推進に資するために、地形、土地利用、公共施設などの国土に関する基礎的な情報をGISデータとして整備したものです。そのうち公開に差し支えないものについて、「地理空間情報活用推進基本法」等を踏まえて無償で提供しています

行政区域データは複数のフォーマットがあり、GeoJSONファイルもあります。

まとめ

地理情報をつかうGeoJSONデータ形式と、簡単に入手して使ってみる方法でした。

d3.jsでJSONデータを扱うときは、下記の記事もご参考ください。

関連情報

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA