GeoJSONの仕様の資料と使用例

 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

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG