地図や地理情報を使うときによく聞くGeoJSONというデータについてご紹介していきます。
目次
GeoJSONとは?
GeoJSONは、JavaScript Object Notation (JSON) を用いて空間データをエンコードし非空間属性を関連付けるファイルフォーマット。
https://ja.wikipedia.org/wiki/GeoJSON
属性にはポイント(住所や座標)、ライン(各種道路や境界線)、 ポリゴン(国や地域)などが含まれる。
他のGISファイル形式との違いとして、Open Geospatial Consortiumではなく世界各地の開発者達が開発し管理している点で異なる。
TopojsonはGeoJSONに影響され開発された。
ざっくり言うと、地理情報が入ったJSONのデータ形式です。
GeoJSONデータの構造
GeoJSONは、様々な地理的データ構造をエンコードするためのフォーマットです。
サンプルデータ
{
"type": "FeatureCollection", // フィーチャーコレクションオブジェクトを指定
"features": [ // featuresプロパティは地物の配列
{
"type": "Feature", // フィーチャーオブジェクトを指定
"properties": { // 属性を表現するハッシュ
"label": "私の家"
},
"geometry": { // ジオメトリ(形状)
"type": "Point", // ジオメトリオブジェクトを指定
"coordinates": [
138.603515625,
36.10237644873644
]
}
}
]
}
GeoJSONオブジェクト
GeoJSONオブジェクトは
- ジオメトリ (形状)
- フィーチャー (地物)
- フィーチャーの集まり
を表現します。
"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データが公開されているので、ダウンロードしてみることができます。
このように、マウスを使って自分で色々なジオメトリオブジェクトを配置して、GeoJSONデータで出力してみることができます。
国土数値情報ダウンロードサービスを使う
国土交通省国土政策局国土情報課が提供しているデータを使うこともできます。
国土数値情報 ダウンロードサービス
行政区域データは複数のフォーマットがあり、GeoJSONファイルもあります。
まとめ
地理情報をつかうGeoJSONデータ形式と、簡単に入手して使ってみる方法でした。
d3.jsでJSONデータを扱うときは、下記の記事もご参考ください。