多行 POLYGON 与一个 MULTIPOLYGON 字段的优缺点是什么?

What are the pros and cons of multiple rows of POLYGON vs one MULTIPOLYGON field?

所以这是我第一次做一个涉及地图和图层的项目,地图上有很多点和很多多边形。

我倾向于为点和多边形创建单独的 table,然后在它们与层 table 之间创建多对多关系。如果我这样做,我最终得到 5 tables:pointspolygonslayerslayers_pointslayers_polygons.

但是,我看到 PostGIS 还提供了称为 MULTIPOINTMULTIPOLYGON 的类型。如果我使用这些类型,那么我可以将它们全部放在 layers table 中。我想这会使查询更快,因为我需要更少的连接。但是,我不确定以后我是否会后悔,如果这意味着无法处理单个点和多边形。我什至不确定是否有必要对单个点和多边形执行计算,但很高兴知道这两种方法是否可行。

所以基本上我要问的是,这些不同方法的优缺点是什么?

一般来说,您会考虑使用多面体来表示具有不相交表面的实体(例如,阿拉斯加的几何图形)或您无法表示为多边形的其他拓扑。这里的关键是单个实体需要用multipolygon

表示

不会做的是将不相关多边形组合成多多边形,因为您将无法在以下位置执行查询子多边形级别,除非您将环提取到另一个几何体中。如果多边形不相关,您可能需要单独查询它们。即使它们共享一个层,您也可以在不合并它们的情况下管理与业务逻辑的关系,因为它们不代表相同的实体。

请记住,前端的几何工具不一定会将多面体视为有效几何体或多对象。看起来像您的用例的多边形点算法在检查一个点是否包含在多多边形中时不一定有效。

Wicket.js(转换 from/to WKT/geojson/native 对象)等工具不支持多面体。 Google maps api v3 不支持除数据层外的多面(但您不能像在多边形要素上那样在数据层上进行操作)。 Turf.js 的操作会 运行 包含多个多边形的 Featurecollection,而不是多多边形。

在不知道你的确切用例的情况下,这是我能告诉你的最好的,TL/DR:保持你的多边形原样