我有一个可以相互包含的区域的数据库表,从而产生树/森林结构。每个区域都有一个父指针,顶级区域有一个null
父级。
我想改变它,所以有一个顶级区域包含简化查询的所有内容。然后我不需要处理顶级区域的特殊情况,因为区域总是有父级。
是否有任何方法(在PostGIS和Oracle Spatial中)插入一个具有“无限大”几何的区域,以便始终可以找到相交查询?
具体来说,我想要一个几何形状,无论G是什么,以下都是真的:
ROOT contains G = true
ROOT intersects G = true
ROOT overlaps G = false
答案 0 :(得分:1)
我没有遇到任何实现这个概念的东西,但你可以(粗略地)用触发器实现它;这样,每次插入新行时,顶级父级都会将新形状合并到自身中。
这个(或任何类似的方法)的可能问题是你的表现不会很好;当然,甲骨文并不能很好地处理复杂的几何,你可能会扭曲你的域索引。
您还会发现在Oracle中,对sdo_geometry对象有一个纵坐标限制。从Oracle文档(http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#i1004087):
因为最大SDO_ORDINATE_ARRAY大小为1,048,576个数字,所以SDO_GEOMETRY对象中的最大顶点数取决于每个顶点的维数:两个维度为524,288,三维为349,525,四维为262,144。
如果您稍微简化父形状,这应该不是问题。
我认为保留你的特殊套管可能比走这条路更好。