gpt4 book ai didi

MongoDB/GeoJson : MultiPolygon vs GeometryCollection containing only polygons

转载 作者:行者123 更新时间:2023-12-05 04:04:35 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

如果您要单独存储点,例如eventCentereventAreasEffected 分开,那么 eventCenter 可以只是一个 PointeventAreasEffected 可以是单个“MultiPolygon”;不需要 GeometryCollection。在多个字段中使用 geo,并且在这些字段中使用或不使用多个 2dsphere 索引是完全没问题的。从 MongoDB 4.0 开始,您可以通过包含 key 选项在具有多个 2dsphere 索引的集合上使用 $geoNear

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

一个更微妙的问题是 PolygonMultiPolygonGeometryCollection 的设计和语义。更复杂的是,Polygon 中定义的显式空洞与隐式“分层”Polygon 的集合存在问题,后者在 DB 外部进行后处理地理软件。

关于MongoDB/GeoJson : MultiPolygon vs GeometryCollection containing only polygons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496699/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com