Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 多行多边形与一个多多边形场的优缺点是什么?_Postgresql_Doctrine Orm_Postgis - Fatal编程技术网

Postgresql 多行多边形与一个多多边形场的优缺点是什么?

Postgresql 多行多边形与一个多多边形场的优缺点是什么?,postgresql,doctrine-orm,postgis,Postgresql,Doctrine Orm,Postgis,这是我第一次做一个项目,涉及到地图和地图上的图层,上面有很多点和多边形 我倾向于为点和多边形创建单独的表,然后在它们和图层表之间创建多对多关系。如果我这样做,我将得到5个表:点,多边形,层,层(点和层)多边形 然而,我看到PostGIS也提供了名为MULTIPOINT和MULTIPOLYGON的类型。如果我使用这些类型,那么我可以将其全部放在层表中。我想这会使查询更快,因为我需要更少的连接。然而,我不确定以后我是否会后悔,这是否意味着处理单个点和多边形变得不可能。我甚至不确定是否有必要对单个点和

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

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

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


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

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

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

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

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


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

尝试在哪里交叉发布您将获得更多GIS专家视图。我没有答案,但需要考虑:每个几何体列都需要指定的几何体类型。您不能在此列中混搭。“多点”和“多多边形”是允许在单个记录中存在多个特征的几何体类型(ArcMap也有这些特征类型)。为了使用
图层
表,您需要为要包括的每种几何图形类型都有一列。@MichaelMarkieta,该限制适用于Postgis 1.x。版本2.x没有这样的限制。您可以通过检查强制几何体类型,但它完全是可选的仅供参考-可用于从多维数据库中查询单个几何体,因此可以向后查询。您可以将其用于偶尔的修复,但如果您在一个组中不断更改单个几何体,则最好避免使用多部分几何体。@amenadiel谢谢!我不知道!