読者です 読者をやめる 読者になる 読者になる

たなちの開発日誌

プログラミングのメモを中心に気になったことを書いていきます。

JSONとかGeoJSONについて調べてみた

OpenStreetMapを使って開発をしてたら
JSONとかGeoJSONとやらを使うらしい。知らなかったのでまとめてみる。

まずはJSONとは?

dev.classmethod.jp
こちらのサイトがわかりやすかった。

ざっくり言うと、JSONとはデータの形式のひとつ。JSON形式で記述したデータのことを、JSON-textという。
(正式名称:JavaScript Object Notation)

どんな形式か

メンバー(member)によって構成される。メンバーとは「コロンを文字列値で挟んだもの」
こんな感じ。

{
  "foo": [ 1, null ],
  "baz": {
    "foo": [ true, "bar" ],
    "baz": "qux"
  }
}

単純な表形式では表現できないものを表現することができる。

そしてGeoJSONとは?

名前から想像がつきそうだけど位置情報をもつJSON形式のデータってことかな。
Wikipediaみると、「JSONを用いて空間データをエンコードし非空間属性を関連付けるファイル形式である。」
こういうものらしい。

{ "type":"FeatureCollection",
	"features": [
		{ "type": "Feature",
		   "geometry": {
			"type": "Point",
			"coordinates": [102.0, 0.5]
		    },
      		   "properties": {"prop0": "value0"}
		},
    		{ "type": "Feature",
      		   "geometry": {
        		"type": "LineString",
        		"coordinates": [
          			[102.0, 0.0], [103.0, 1.0]
          		]
        	    },
      		    "properties": {
        		"prop0": "value0",
        		"prop1": 0.0
        	    }
		},
     	]
}

GeoJSONオブジェクトは次の3種類で、ジオメトリ (形状)、フィーチャー (地物)、フィーチャーコレクション(フィーチャーの集まり)を表現する。まとまりの大きさ的には、フィーチャーコレクション>フィーチャー>ジオメトリの順。

ジオメトリオブジェクト

"type"が次のいずれか。Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygonまたはGeometryCollection
これらの詳細はGeoJSON フォーマット仕様を参照。
必ず"coordinates" メンバーを持つ(GeometryCollection以外のとき)。

coordinatesメンバー

中身は配列で経度、緯度(、高度)の順。次のいずれかが入る。

  • ひとつの位置 (Point)
  • 位置の配列 (LineString や MultiPoint)
  • 位置の配列の配列 (Polygons か MultiLineStrings)
  • 位置の多次元配列 (MultiPolygon)

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

"type" が"Feature"
必ず"geometry"、"properties"のメンバーをもつ。内容はそれぞれジオメトリオブジェクトかJSONのNull、任意のJSONオブジェクトかJSONのNull。
"properties"メンバーには、国や県の名前などを入れることが多いらしい。

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

"type" が"FeatureCollection"
フィーチャーオブジェクトの集まり。"features" に対応する値は配列。

参考にさせていただいたサイトはこちら
GeoJSON フォーマット仕様
GeoJSONって何だろう? | Qaramell Blog