MongoDb / GeoJson:仅包含多边形的MultiPolygon与GeometryCollection

时间:2018-09-25 11:05:47

标签: mongodb geospatial geojson spatial-index

我正在从不同来源收集位置信息,并将所有内容存储在MongoDb集合中。除了具有单个纬度/经度坐标的点位置之外,我还存储区域。

现在,一个数据给我的位置信息为GeometryCollection,但所有元素均为Polygons。另一个数据源为我提供了MultiPolygon的位置。虽然我实际上正在考虑为每个数据源收集一个数据,但我想知道哪种方法总体上更好。

GeometryCollection当然更灵活,但也许MultiPolygon显示出更好的查询性能(假设我总是在location字段上创建2dspehere索引)。将一个表示转换成另一个表示值得吗?

2 个答案:

答案 0 :(得分:1)

好消息:对于所有受支持的GeoJSON类型,MongoDB中的查询性能和可索引性都相同。

决策的主要驱动力应该是地理字段的信息体系结构和使用它的软件是否需要包含比多边形更多的类型。您说您要存储地点位置?如果您想将所有地理数据保存在一个字段中,例如location(并可能带有2dsphere索引),那么您将需要GeometryCollection,其中可以放入PointMultiPolygon。在GeoJSON规范https://tools.ietf.org/html/rfc7946#page-9中,建议不要嵌套GeometryCollection,因此对于为您提供GeometryCollection的那些数据源,您将迭代内容并填充自己的内容GeometryCollection,其中也包含您的Point等。

如果要单独存储点,例如eventCentereventAreasEffected分开,则eventCenter可以只是一个Point,而eventAreasEffected可以是一个'MultiPolygon';不需要GeometryCollection。在一个以上的字段中具有地理区域,并且在这些字段上具有或不具有多个2dsphere索引是非常好的。从MongoDB 4.0开始,通过包含$geoNear选项,可以在具有多个2dsphere索引的集合上使用key

这是一种非正式但合理的定义方法:MultiPolygon不是Polygon的任意集合,而是一个碰巧具有不相交多边形的单个“形状概念”。可以用一个MultiPolygon来描述美国,其中有阿拉斯加,夏威夷,美国大陆,也许还有波多黎各,等等。实际上,为此,您会注意到,存储数据有些麻烦与MultiPolygon的每个成员相关,因为coordinates只能是点数组。例如,有关第三多边形的信息必须在对等字段中携带到单个顶级coordinates字段中。但是PolygonGeometryCollection的{​​{1}}的离散数组可以按每个形状存储其他信息。请注意,对于每种形状,除了Polygontype之外,GeoJSON和MongoDB都不限制您添加字段。

一个更微妙的问题是coordinatesGeometryCollection的{​​{1}}的设计和语义。更复杂的是,在Polygon中定义了显式漏洞,而不是通过地理软件在数据库外部进行后处理的隐式“分层” MultiPolygon集合。

答案 1 :(得分:0)

这个问题的问题是没有一个好的答案。 这就是您想要或需要的一切。这是在stackExchange上写的一个很好的答案。

多边形与多多边形 https://gis.stackexchange.com/questions/225368/understanding-difference-between-polygon-and-multipolygon-for-shapefiles-in-qgis

,我不了解GeometryCollection,所以无法告诉您任何有关此的信息。但是此链接将向您显示很多信息。