多行 POLYGON 与一个 MULTIPOLYGON 字段有何优缺点?

Eve*_*ert 2 postgresql postgis doctrine-orm

因此,我第一次要做一个涉及地图和地图之上的图层的项目,地图上有很多点和很多多边形。

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

但是,我看到 PostGIS 还提供了名为MULTIPOINT和 的类型MULTIPOLYGON。如果我使用这些类型,那么我可以将其全部放入表中layers。我想这会让查询更快,因为我需要更少的连接。然而,我不确定以后我是否会后悔,如果这意味着处理单个点和多边形变得不可能。我什至还不确定是否有必要对各个点和多边形进行计算,但很高兴知道这两种方法是否可行。

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

ame*_*iel 5

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

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

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

像 Wicket.js 这样的工具(从 WKT/geojson/native 对象转换)不支持多边形。Google 地图 API v3 不支持除数据层之外的多边形(但您无法像在多边形要素上那样对数据层进行操作)。Turf.js 的操作可以在包含多个多边形的要素集合上运行,但不能在多重多边形上运行。

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