为什么多边形GeoJSON对象的坐标存储在数组数组中?

时间:2017-10-24 18:14:22

标签: mongodb mongodb-query geospatial datamodel

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类格式

1 个答案:

答案 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。

以这种方式定义,可以创建一个带有多边形的圆环形状。

这种类型的构造只有在它表示为数组数组时才有可能,因此是标准。