MongoDb/GeoJson:MultiPolygon 与仅包含多边形的 GeometryCollection
MongoDb/GeoJson: MultiPolygon vs GeometryCollection containing only polygons
我正在从不同来源收集位置信息并将所有内容存储在 MongoDb 集合中。除了具有单个 lat/lng 坐标的点位置外,我还存储区域。
现在,一个数据给我的位置信息是 GeometryCollection
,但所有元素都是 Polygons
。另一个数据源给我的位置是 MultiPolygon
。虽然我实际上正在考虑为每个数据源创建一个集合,但我想知道哪种方法总体上更好。
GeometryCollection
当然更灵活,但也许 MultiPolygon
显示更好的查询性能(假设我总是在位置字段上创建 2dspehere
索引)。将一种表示形式转换为另一种表示形式是否值得?
这个主题的问题是没有好的答案。
这完全取决于您喜欢或需要什么。这是写在 stackExchange 上的一个很好的答案。
而且我不了解 GeometryCollection,所以无法告诉您任何相关信息。但是这个 link 会向你透露很多信息。
好消息:对于所有受支持的 GeoJSON 类型,MongoDB 中的查询性能和可索引性是相同的。
您决定的主要驱动因素应该是地理字段的信息架构和使用它的软件是否需要包含更多类型而不仅仅是多边形。你说你在存储点位置?如果您想将所有地理数据保存在一个字段中,例如location
(并且可能带有 2dsphere 索引)那么您将需要 GeometryCollection
,您可以将 Point
和 MultiPolygon
放入其中。 GeoJSON 规范 https://www.rfc-editor.org/rfc/rfc7946#page-9 不建议 嵌套 GeometryCollection
因此对于那些给你 GeometryCollection
的数据源,你会迭代内容和填充您自己的 GeometryCollection
,其中还包含您的 Point
等
如果您要单独存储点,例如eventCenter
与 eventAreasEffected
分开,那么 eventCenter
可以只是一个 Point
而 eventAreasEffected
可以是一个 'MultiPolygon';不需要 GeometryCollection
。在多个字段中使用 geo,并且在这些字段中使用或不使用多个 2dsphere 索引是完全没问题的。从 MongoDB 4.0 开始,您可以通过包含 key
选项在具有多个 2dsphere 索引的集合上使用 $geoNear
。
这是一种非官方但合理的定义方法:MultiPolygon
不是 Polygon
的任意集合,而是恰好具有不相交多边形的单个“形状概念”。美国可以用一个 MultiPolygon
来描述,其中有阿拉斯加、夏威夷、美国大陆,也许还有波多黎各等。事实上,为此,您会注意到存储数据有点棘手与 MultiPolygon
的每个成员相关,因为 coordinates
只能是点数组的数组。例如,关于第三个多边形的信息必须在对等字段中携带到单个顶层 coordinates
字段。但是 Polygon
的离散数组或 Polygon
的 GeometryCollection
可以以 each 形状存储额外信息。请注意,GeoJSON 和 MongoDB 都不会限制您为每个形状添加 type
和 coordinates
之外的字段。
一个更微妙的问题是 Polygon
与 MultiPolygon
的 GeometryCollection
的设计和语义。更复杂的是,Polygon
中定义的显式漏洞与地理软件在数据库外部 post 处理的隐式“分层”Polygon
的集合存在问题.
我正在从不同来源收集位置信息并将所有内容存储在 MongoDb 集合中。除了具有单个 lat/lng 坐标的点位置外,我还存储区域。
现在,一个数据给我的位置信息是 GeometryCollection
,但所有元素都是 Polygons
。另一个数据源给我的位置是 MultiPolygon
。虽然我实际上正在考虑为每个数据源创建一个集合,但我想知道哪种方法总体上更好。
GeometryCollection
当然更灵活,但也许 MultiPolygon
显示更好的查询性能(假设我总是在位置字段上创建 2dspehere
索引)。将一种表示形式转换为另一种表示形式是否值得?
这个主题的问题是没有好的答案。 这完全取决于您喜欢或需要什么。这是写在 stackExchange 上的一个很好的答案。
而且我不了解 GeometryCollection,所以无法告诉您任何相关信息。但是这个 link 会向你透露很多信息。
好消息:对于所有受支持的 GeoJSON 类型,MongoDB 中的查询性能和可索引性是相同的。
您决定的主要驱动因素应该是地理字段的信息架构和使用它的软件是否需要包含更多类型而不仅仅是多边形。你说你在存储点位置?如果您想将所有地理数据保存在一个字段中,例如location
(并且可能带有 2dsphere 索引)那么您将需要 GeometryCollection
,您可以将 Point
和 MultiPolygon
放入其中。 GeoJSON 规范 https://www.rfc-editor.org/rfc/rfc7946#page-9 不建议 嵌套 GeometryCollection
因此对于那些给你 GeometryCollection
的数据源,你会迭代内容和填充您自己的 GeometryCollection
,其中还包含您的 Point
等
如果您要单独存储点,例如eventCenter
与 eventAreasEffected
分开,那么 eventCenter
可以只是一个 Point
而 eventAreasEffected
可以是一个 'MultiPolygon';不需要 GeometryCollection
。在多个字段中使用 geo,并且在这些字段中使用或不使用多个 2dsphere 索引是完全没问题的。从 MongoDB 4.0 开始,您可以通过包含 key
选项在具有多个 2dsphere 索引的集合上使用 $geoNear
。
这是一种非官方但合理的定义方法:MultiPolygon
不是 Polygon
的任意集合,而是恰好具有不相交多边形的单个“形状概念”。美国可以用一个 MultiPolygon
来描述,其中有阿拉斯加、夏威夷、美国大陆,也许还有波多黎各等。事实上,为此,您会注意到存储数据有点棘手与 MultiPolygon
的每个成员相关,因为 coordinates
只能是点数组的数组。例如,关于第三个多边形的信息必须在对等字段中携带到单个顶层 coordinates
字段。但是 Polygon
的离散数组或 Polygon
的 GeometryCollection
可以以 each 形状存储额外信息。请注意,GeoJSON 和 MongoDB 都不会限制您为每个形状添加 type
和 coordinates
之外的字段。
一个更微妙的问题是 Polygon
与 MultiPolygon
的 GeometryCollection
的设计和语义。更复杂的是,Polygon
中定义的显式漏洞与地理软件在数据库外部 post 处理的隐式“分层”Polygon
的集合存在问题.