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



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

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

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

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

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

如果您单独存储积分,例如eventCentereventAreasEffected分开,则eventCenter可以只是一个PointeventAreasEffected可以是单个"多多边形";无需GeometryCollection. 在多个字段中具有geo,并且在这些字段中具有或没有多个2dsphere索引是完全可以的。 从 MongoDB 4.0 开始,您可以通过包含key选项在具有多个 2dsphere 索引的集合上使用$geoNear

这里有一个非官方但合理的定义方法:MultiPolygon不是Polygon的任意集合,而是一个碰巧具有不相交多边形的单个"形状概念"。 美国可以用一个单一的MultiPolygon来描述,有阿拉斯加、夏威夷、美国大陆,也许还有波多黎各等。 事实上,为此,您会注意到存储与MultiPolygon的每个成员相关的数据有点棘手coordinates因为它只能是点数组的数组。 例如,有关第三个多边形的信息必须在对等字段中传递到单个顶级coordinates字段。 但是,离散的Polygon数组或GeometryCollectionPolygon可以在每种形状中存储额外的信息。 请注意,GeoJSON 和 MongoDB 都不限制您为每个形状添加字段以及typecoordinates

一个更微妙的问题是PolygonGeometryCollection的设计和语义。MultiPolygon. 更复杂的是,Polygon中定义了显式漏洞的问题,而不是由地理软件在数据库外部进行后处理的隐式"分层"Polygon集合。

这个主题的问题在于没有一个好的答案。 这完全取决于您喜欢或需要什么。这是写在stackExchange上的一个很好的答案。

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

而且我不知道GeometryCollection,所以不能告诉你任何关于它的信息。 但是此链接将向您揭示很多信息。

最新更新