如Official documentation页面所示,多边形GeoJSON对象的“Schema”如下所示:
db.someCollection.insert({
type: "Polygon",
coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ] ]
});
为什么不能简单地如下所示: A类
db.someCollection.insert({
type: "Polygon",
coordinates: [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ]
});
我认为原因可能是存储多个 geofences ....我是对的吗?
类似于: B型
db.someCollection.insert({
type: "Polygon",
coordinates: [
[ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0 ] ],
[ [ 1 , 1 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 1 , 1 ] ]
]
});
我发布此问题的原因是因为我认为在使用Mongo DB中的一些功能(例如 $ geoIntersects 和 $ geoWithin )之后我的假设是错误的要求“架构”采用 A类格式
答案 0 :(得分:6)
MongoDB没有定义GeoJSON格式。相反,它是在标准中定义的:RFC7946
这是RFC中有关多边形的相关部分:https://tools.ietf.org/html/rfc7946#section-3.1.6,其中声明:
对于类型" Polygon","坐标"成员必须是一个线性环坐标数组的数组。
对于具有多个这些环的多边形,第一个必须是 外圈和其他任何一个必须是内圈。该 外圈限制表面和内圈(如果 在表面内有孔。
线性环定义为:
- 线性环是一个封闭的LineString,有四个或更多位置。
LineString是https://tools.ietf.org/html/rfc7946#section-3.1.4:
- 对于类型" LineString","坐标" member是两个或两个数组 更多职位。
基本上,多边形被定义为一系列封闭的LineStrings,第一个LineString定义多边形的边界,后续的LineStrings定义" hole"在第一个LineString。
以这种方式定义,可以创建一个带有多边形的圆环形状。
这种类型的构造只有在它表示为数组数组时才有可能,因此是标准。