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