在关系数据库中,由不同要素共享的属性可以存储一次,使用ID将它们链接到单独的几何记录。那么,多部分功能是平面文件数据存储的传统吗?
#1 楼
如果您的软件不支持多部分功能,则可能需要花费非凡而复杂的长度来执行空间操作。例如,两个多边形的相交通常可以具有多个连接的分量。从算法和概念上来说,方便的是假设这样的交集返回单个对象(多部分多边形),而不是任意数量的多边形。 (出于相同的原因,支持各种形式的零要素和简并要素也很有帮助-例如,具有范围但面积为零的多边形,甚至具有位置但范围或面积均不包含的多边形。这些东西可能来自几何运算;支持它们消除了繁琐的逐案后处理,并可以防止有用的信息消失。)从关系数据库的角度来看,多部分功能使规范化成为可能:当属性与一个多边形的集合,您想将该集合表示为单个对象。一个很好的例子是代表世界上几乎所有拥有海岸线的国家/地区的地图项,因为该国家可能包括一些岛屿。您是否真的要强制您的RDBMS为每个小岛复制一份国家属性?很有可能不会。您甚至都不希望(或不需要)维护指向该属性的指针的多个副本。
如果不作为协作多折线,您将如何表示网络或分支树?
从数学或算法数据结构的角度来看,允许多部分功能只是一种简化,而不是一种复杂性。为了支持多重连接的多边形(具有“孔”的环和多边形),您已经需要用于表示多部分多边形的设备。
最后,“矢量”对象及其典型的“意大利面条表示”起源于简单复杂理论。 (只有通过与拓扑学理论之间这种微弱的联系,术语“拓扑”才将其纳入GIS,否则它就实质上不使用该理论。)该理论需要多部分功能,并从中受益。实际上,仅具有单个成分并不是简单复合体定义的一部分,而是事实证明它们是其中某些成员所享有的特殊属性(通过第零个同源性组的排名来检测)。因此,“单个部分”不是定义属性,而仅仅是一种拓扑质量,与在多边形中具有环或“孔”是一种拓扑质量(与第一同源性组的等级有关)相同。
评论
很好的答案。我不是100%相信使用多部分功能来规范化数据库-每个多边形仍然具有诸如面积和长度之类的独特属性,而诸如“希腊的多少面积由岛屿组成”之类的查询就很难回答赋予每个多边形属性。
– geoographika
2010-11-22 19:51
@geographika Yours是一个很好的例子,说明了为什么有人需要灵活性来用数据库表示实体(无论是否为空间)。为了进一步扩展,人们还可能认为,需要将各个多边形“炸开”到它们的外圈和内圈中,以便回答诸如“希腊的多少面积由湖泊组成”的问题。任何给定的数据库结构都会使某些查询变得容易,而其他查询则变得更加困难。因此,良好数据库设计的一部分必须包括考虑数据库的预期用途。一个好的(空间)DBMS将提供在不同结构之间转换的机制。
– hu
2010-11-22在19:59
+1好答案。不过,可能值得讨论多部分功能的性能缺点。以美国高速公路的折线要素类为例,其中高速公路要素在州边界被分割。通过解散高速公路名称来创建第二要素类,从而使I-10跨越整个大陆。现在比较“识别”工具的性能。除非更改了ESRI的空间索引策略,否则在多部分要素类上它将变慢,因为有更多的MBR相互重叠。检查其MBR与该点重叠的每个要素的每个坐标。
– Kirk Kuykendall
2010-11-22 23:12
@柯克好点。但是,您的示例指出了ESRI技术的缺陷,而不仅仅是在原则上突出了问题。通过合理有效但简单的空间数据结构(例如四叉树)识别特征应具有O(log(N))性能(在对存储的数据结构进行初始缓存之后)。将N个特征中的每个特征(假定为大)平均分为K个部分(假定与N相比为中等或较小),将log(N)增大为log(N)+ log(K),这在假定的基础上实际上是可行的不明显。
– hu
2010-11-23 15:48
@Dandy感谢您强调多零件几何和仅零件集合之间的区别。我认为并非所有的多部分要素类型都必然会“约束”它们的组成部分。这可能取决于实现方式,这指出“多部分”的概念包含一些细微的变化。
– hu
2010-12-04 20:44