GeoJSON对象
概述
MongoDB支持以下类型的GeoJSON对象类型:
- 点(Point)
- 线(LineString)
- 多边形(Polygon)
- 多点(MultiPoint)
- 多线(MultiLineString)
- 多个多边形(MultiPolygon)
- 几何集合(GeometryCollection)
要存储GeoJSON数据的话,在文档中使用 type字段来指定GeoJSON对象类型以及 coordinates 对象来指定对象的坐标:
{ type: "<GeoJSON type>" , coordinates: <coordinates> }
//示例
{ "type": "Point", "coordinates": [lon(经度),lat(纬度)]}
一般以经度、纬度的顺序来排列坐标
- 有效的经度值在-180和180之间(包括两端值)
- 有效的纬度值在-90和90之间(包括两端值)
MongoDB默认使用WGS84基准作为GeoJSON默认的坐标参考系统。
点(Point)
示例如下:
{ type: "Point", coordinates: [ 40, 5 ] }
线(LineString)
对于LineString类型, coordinate 成员必须是两个或多个坐标的数组。示例如下:
{ type: "LineString", coordinates: [ [ 40, 5 ], [ 41, 6 ] ] }
一个线性环由4个或更多坐标构成。第一个和最后一个坐标相等(它们表示相同的坐标)。尽管线性环没有被显式表示为一个GeoJSON几何类型,但是它在多边形几何类型定义中有提及到。
多边形(Polygon)
多边形由一个GeoJSON线性环坐标数组的数组组成。这些线性环闭合的线段。闭合的线段至少有4个坐标对,并且第一个坐标和最后一个坐标相同。
一个弯曲平面上两个点组成的线不一定等同于在一个平面上这两个点确定的线。在弯曲平面上两个点连接的线是测地线。仔细检查点的坐标,以避免共边、重合以及其它交叉类型的错误。
单环多边形
下面的示例展示了一个外环的GeoJSON多边形,不包括内环(或者小洞)。第一个和最后一个坐标必须相同以关闭这个多边形。
{
type: "Polygon",
coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
}
对于单环的多边形,这个环不能自交叉。
多环多边形
对于多环多边形:
第一个描述的环必须是外环
外环不能自交叉
所有内环必须全部包含在外环中
内环之间不能交叉或覆盖。内环不能共边
下面的示例表示了包含一个内环的GeoJSON多边形:
{
type : "Polygon",
coordinates : [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ],
[ [ 2 , 2 ] , [ 3 , 3 ] , [ 4 , 2 ] , [ 2 , 2 ] ]
]
}
多点(MultiPoint)
GeoJSON多点嵌入文档包含一系列点。
{
type: "MultiPoint",
coordinates: [
[ -73.9580, 40.8003 ],
[ -73.9498, 40.7968 ],
[ -73.9737, 40.7648 ],
[ -73.9814, 40.7681 ]
]
}
多线(MultiLineString)
示例如下:
{
type: "MultiLineString",
coordinates: [
[ [ -73.96943, 40.78519 ], [ -73.96082, 40.78095 ] ],
[ [ -73.96415, 40.79229 ], [ -73.95544, 40.78854 ] ],
[ [ -73.97162, 40.78205 ], [ -73.96374, 40.77715 ] ],
[ [ -73.97880, 40.77247 ], [ -73.97036, 40.76811 ] ]
]
}
多个多边形(MultiPolygon)
示例如下:
{
type: "MultiPolygon",
coordinates: [
[ [ [ -73.958, 40.8003 ], [ -73.9498, 40.7968 ], [ -73.9737, 40.7648 ], [ -73.9814, 40.7681 ], [ -73.958, 40.8003 ] ] ],
[ [ [ -73.958, 40.8003 ], [ -73.9498, 40.7968 ], [ -73.9737, 40.7648 ], [ -73.958, 40.8003 ] ] ]
]
}
几何集合(GeometryCollection)
GeoJSON类型GeometryCollection的存储示例如下:
{
type: "GeometryCollection",
geometries: [
{
type: "MultiPoint",
coordinates: [
[ -73.9580, 40.8003 ],
[ -73.9498, 40.7968 ],
[ -73.9737, 40.7648 ],
[ -73.9814, 40.7681 ]
]
},
{
type: "MultiLineString",
coordinates: [
[ [ -73.96943, 40.78519 ], [ -73.96082, 40.78095 ] ],
[ [ -73.96415, 40.79229 ], [ -73.95544, 40.78854 ] ],
[ [ -73.97162, 40.78205 ], [ -73.96374, 40.77715 ] ],
[ [ -73.97880, 40.77247 ], [ -73.97036, 40.76811 ] ]
]
}
]
}