GeoJSON は Geometry JSON の略であり、JSONで地理情報を表現するためのフォーマットのことです。GeoJSON は点、線、面とその集合、加えて任意の情報を保持できるフォーマットです。具体的な定義は次です。読み解くのはしんどいですが正確です。
RFC 7946: The GeoJSON Format
RFC 7946 – The GeoJSON Format 日本語訳
比較的読みやすい資料としては Wikipedia や GIS を主とした技術ブログあたりがあります。
GeoJSON – Wikipedia
GeoJSON 仕様 | Geolonia 公式ドキュメント
GeoJSONの形式ですが位置情報については次の様になっています。
{
"type": "型名",
"coordinates": "座標"
}
型名とそれに対応する座標の情報が保持されます。座標は点ならば一つだけ、線や面ならば複数、集合ならばそれらの複数といった具合に配列で増えます。点、線、面とそれらの集合は全てこの形で Geometry Object として定義されています。ここで使える型の説明が次です。
| GeoJSONにおける型名 | 説明 |
|---|---|
| Point | 点 |
| LineString | 線 |
| Polygon | 面 |
| MultiPoint | 点集合 |
| MultiLineString | 線集合 |
| MultiPolygon | 面集合 |
| GeometryCollection | 点と線と面の集合 |
これについては WikiPedia に図付きで説明があるので、そちらを見る方がわかりやすいです。これらで位置情報については十分なのですが GIS(Geographic Information Systemの略。位置と位置に関する情報を使ったシステムの総称)などで使うためには位置情報のみではいささか不便です。位置情報と密な任意の情報を付与できる領域が欲しくなります。これを解決できる型が Feature と FeatureCollection です。
Feature は Geometry Object をラッピングした型です。これは次の様に定義され、properties の中に任意の情報を加えられます。
{
"type": "Feature",
"geometry": {
"type": "Geometry Objectの型",
"coordinates": "位置情報"
},
"properties": {
"任意のプロパティ名": "任意の値",
"任意のプロパティ名その2": {
"JSONとして正しい形式ならば": "自由に値を付与できます"
}
}
}
properties に任意の情報を加えられる機能を先ほどの Geometry Object の位置情報に対して使ってみます。これは例えば次の様になります。
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"fill": "rgba(0, 128, 255, 0.5)",
"border": "rgb(0, 128, 255)"
}
}
この例では面を描画する際の色を定義しています。濃い青で縁取りをして、半透明の青で中を塗るといった具合です。この他にもこの面は○○という建物、この線は国道×号線、の様に様々な情報をシステムに合った形で付与できます。
FeatureCollection はその名の通り Feature 型を集めた型です。この型が一番リッチな型であり、おおよそ十分に地理情報を表現できます。使用の仕方は features 以下にFeature型の配列を並べるのみで、使用例は次です。
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
},
"properties": {
"fill": "rgba(0, 128, 255, 0.5)",
"border": "rgba(0, 128, 255, 0.5)"
}
},{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [100.5, 0.5]
},
"properties": {
"markerImg": "/img.example.com/marker.webp"
}
}
]
}
FeatureCollection を含めて GeoJSON は様々な地理関連のシステムで使えます。そのため、その整備も進んでおり、例えば TypeScript ならば次のリポジトリに GeoJSON 形式の型定義があります。
DefinitelyTyped/index.d.ts at master · DefinitelyTyped/DefinitelyTyped
DefinitelyTyped/DefinitelyTyped: The repository for high quality TypeScript type definitions.
@types/geojson – npm