GeoJSONデータの定義

GeoJSONの仕様(https://tools.ietf.org/html/rfc7946)では、JSONオブジェクトがジオメトリであるためには、typeおよびcoordinatesの2つのフィールドが必要であると規定されています。typeフィールドの値は、オブジェクトが示すジオメトリ形状の種類を指定します。typeフィールドの値は、各種ジオメトリに対応する次の文字列のいずれかである必要があります。
  • Point

  • LineSegment

  • Polygon

  • MultiPoint

  • MultiLineString

  • MultiPolygon

  • GeometryCollection

coordinates値は、ジオメトリ形状を定義する要素の配列です。例外はGeometryCollectionタイプで、これについては後述します。coordinatesの値はジオメトリの形状によって異なりますが、すべての場合に複数の位置が指定されます。positionは、地球の表面上の位置を2つの倍精度数値の配列として定義します。1つ目の数値は経度、2つ目の数値は緯度です。経度と緯度は度数で指定され、それぞれ-180から+180と-90から+90の範囲内である必要があります。

注意:

GeoJSON仕様では、位置の高度を示す3番目の座標を使用できますが、Oracle NoSQL Databaseでは高度はサポートされていません。

ジオメトリの種類は次のように定義されます。種類ごとにオブジェクトの例を示します。

Point — Pointタイプの場合、coordinatesフィールドは単一の位置です。
{ "type" : "point", "coordinates" : [ 23.549, 35.2908 ] }
LineString — LineStringは、接続された1つ以上の線で、ある線の終了点が次の線の開始点になります。coordinatesフィールドは、2つ以上の位置の配列です。最初の位置は最初の線の開始点で、それ以降の各位置は前の線の終了点および次の線の開始点になります。線どうしは交差できます。
{         
"type" : "LineString",
"coordinates" : [ 
[-121.9447, 37.2975],
[-121.9500, 37.3171],
[-121.9892, 37.3182],
[-122.1554, 37.3882],
[-122.2899, 37.4589],
[-122.4273, 37.6032],
[-122.4304, 37.6267],                           
[-122.3975, 37.6144]
]
}

Polygon —ポリゴンは、その外周の長さと領域内にある穴(ある場合)の外周の長さを指定して、表面積を定義します。より正確には、ポリゴンは1つ以上の輪になった線で構成されます。ここで、(a)輪になった線は、4つ以上の位置を持つ閉じたLineStringです。(b)最初と最後の位置は等しく、これらは同一の値を含んでいる必要があります。(c)輪になった線は、表面の境界または表面内にある穴の境界です。(d)輪になった直線は、それが境界を決定している領域を基準とした右手の法則に従う必要があります。つまり、外側の輪の位置は反時計回りに並んでいる必要があり、穴の位置は時計回りに並んでいる必要があります。ポリゴンのcoordinatesフィールドは、輪になった線の座標配列の配列である必要があります。最初の座標は外側の輪である必要があり、その他すべての座標は内側の輪である必要があります。

外側の輪は表面の境界を決定し、内側の輪(ある場合)は表面内の穴の境界を決定します。次の例は、穴のないポリゴンを示しています。
{         
"type" : "polygon", 
"coordinates" : [ [
[23.48, 35.16],
[24.30, 35.16],
[24.30, 35.50],
[24.16, 35.61],
[23.74, 35.70],
[23.56, 35.60],
[23.48, 35.16]
]
]
}  
MultiPoint — MultiPointタイプの場合、coordinatesフィールドは2つ以上の位置の配列です。
{         
"type" : "MultiPoint",
"coordinates" : [ 
[-121.9447, 37.2975],
[-121.9500, 37.3171],
[-122.3975, 37.6144]
]
}
MultiLineString — MultiLineStringタイプの場合、座標メンバーはLineString座標配列の配列です。
{    
"type": "MultiLineString",
"coordinates": [ 
[ [100.0, 0.0], [01.0, 1.0] ],
[ [102.0, 2.0], [103.0, 3.0] ]
]  
} 
MultiPolygon — MultiPolygonタイプの場合、座標メンバーはPolygon座標配列の配列です。
 {    
"type": "MultiPolygon",
"coordinates": [
[                       
[
[102.0, 2.0],
[103.0, 2.0],                         
[103.0, 3.0],                         
[102.0, 3.0],                         
[102.0, 2.0]                       
]                     
],
                     
[                       
[                         
[100.0, 0.0],                         
[101.0, 0.0],                         
[101.0, 1.0],                         
[100.0, 1.0],                         
[100.0, 0.0]
]                     
]                   
] 
}     
GeometryCollection — GeometryCollectionには、coordinatesフィールドのかわりにgeometriesフィールドがあります。geometriesの値は配列です。この配列の各要素は、先に定義した6種類のいずれかの種類であるGeoJSONオブジェクトです。一般的に、GeometryCollectionは、異種のより小さいジオメトリで構成されます。
{    "type": "GeometryCollection",    
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},                    
{"type": "LineString",                      
"coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
}                  
] 
}

注意:

GeoJSON仕様では、その他にFeatureFeatureCollectionという2種類のエンティティが定義されています。Oracle NoSQL Databaseでは、これらのエンティティはサポートされません。