多行POLYGON与一个MULTIPOLYGON领域的优缺点是什么?

时间:2017-02-23 16:07:28

标签: postgresql doctrine-orm postgis

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

表示

不会做什么是将无关的多边形分组到多面体中,因为除非你提取,否则你将无法在子多边形级别执行查询戒指成另一种几何形状。如果多边形不相关,您可能需要单独查询它们。即使它们共享一个层,您也可以管理与业务逻辑的关系,而无需合并它们,因为它们不代表同一个实体。

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

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

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