# GeoJSON

GeoJSON| 拡張子 | `.json`, `.geojson` |
| MIMEタイプ | `application/geo+json` |
| 種別 | GISファイル形式 |
| 派生元 |
JSON |
| 国際標準 |
RFC 7946 |
| オープン フォーマット |
yes |
| ウェブサイト | geojson.org |

**GeoJSON**はJavaScript Object Notation（JSON）を用いて空間データをエンコードし非空間属性を関連付けるファイルフォーマットである。属性にはポイント（住所や座標）、ライン（各種道路や境界線）、 ポリゴン（国や地域）などが含まれる。他のGISファイル形式との違いとして、Open Geospatial Consortiumではなく世界各地の開発者達が開発し管理している点で異なる。TopoJSONはGeoJSONに影響され開発された。

## 歴史

GeoJSONフォーマットについての議論は2007年3月に始まり、フォーマット仕様は2008年6月に完成した。

2015年4月、Internet Engineering Task ForceがGeographic JSON working groupを設立した。2016年8月、GeoJSONはRFC 7946としてリリースされた。

## 例

```
{
 "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], [104.0, 0.0], [105.0, 1.0]
 ]
 },
 "properties": {
 "prop0": "value0",
 "prop1": 0.0
 }
 },
 {
 "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": {
 "prop0": "value0",
 "prop1": { "this": "that" }
 }
 }
 ]
}

```

### ジオメトリ

点（Point）は`[x, y]`または`[x, y, z]`である。`[longitude, latitude ]` または`[eastings, northings]`のいずれとしても解釈される可能性がある。3番目の数値はオプションの標高である。10進数で表現する。

たとえば、ロンドン（51.5074° North, 0.1278° West）は、`[-0.1278, 51.5074]`と表現される。

ジオメトリのプリミティブ| タイプ | 例 |
| --- | --- |
| 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]]
 ]
}

```
 |

複数の部分から成るジオメトリ| Type | 例 |
| --- | --- |
| 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]]
 ]
}

```
 |
| MultiPolygon |  |
```
{ "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]]
 ]
 ]
}

```
 |

## 対応状況

OpenLayers、Leaflet、GeoServer、Django 、GDAL、CartoDB、PostGIS及びMapnik（GDAL OGR変換ライブラリを経由し扱う）など多くのGIS関連ソフトウェアが対応しており、
Bing MapsやYahoo!、GoogleはAPIが対応している。
Googleマップにはライブラリを使用するか、オブジェクトをインスタンス化することによって利用できる。
GitHubはGeoJSONのレンダリングに対応している。

## TopoJSON

TopoJSONはGeoJSONの拡張であり、トポロジーを記述する。

TopoJSONのshape
以下にTopoJSONの例を示す。

```
{
 "type":"Topology",
 "transform":{
 "scale": [1,1],
 "translate": [0,0]
 },
 "objects":{
 "two-squares":{
 "type": "GeometryCollection",
 "geometries":[
 {"type": "Polygon", "arcs":[[0,1]],"properties": {"name": "Left\_Polygon" }},
 {"type": "Polygon", "arcs":[[2,-1]],"properties": {"name": "Right\_Polygon" }}
 ]
 },
 "one-line": {
 "type":"GeometryCollection",
 "geometries":[
 {"type": "LineString", "arcs": [3],"properties":{"name":"Under\_LineString"}}
 ]
 },
 "two-places":{
 "type":"GeometryCollection",
 "geometries":[
 {"type":"Point","coordinates":[0,0],"properties":{"name":"Origine\_Point"}},
 {"type":"Point","coordinates":[0,-1],"properties":{"name":"Under\_Point"}}
 ]
 }
 },
 "arcs": [
 [[1,2],[0,-2]],
 [[1,0],[-1,0],[0,2],[1,0]],
 [[1,2],[1,0],[0,-2],[-1,0]],
 [[0,-1],[2,0]]
 ]
}

```

## 派生

転送効率向上、ストリーミング型処理等を目指し、各種の派生フォーマットがある。

* Newline-delimited GeoJSON
* FlatGeobuf
* GeoArrow
* GeoParquet

* 公式サイト
* RFC 7946 - The GeoJSON Format