Oracle Spatial 12c中sdo_aggr_union填充内环问题咨询
Oracle Spatial 12c
sdo_aggr_union() 处理带内环图形的问题 问题描述
使用Oracle Spatial 12c的sdo_aggr_union()函数对多个包含内环(孔洞)的图形执行聚合操作时,结果会填充孔洞生成实心图形,与预期不符:
- 原始图形:相邻图形间存在切口,且包含内环孔洞
- 聚合结果:切口消失,但原孔洞被填充,转化为实心区域
问题分析与解决方向
1. 是否为预期行为?
sdo_aggr_union()遵循拓扑规则:若孔洞区域被其他合并的多边形覆盖,函数会自动填充该孔洞(拓扑上该区域已不属于“孔洞”范畴)。但如果未被覆盖的孔洞仍被填充,则不属于预期行为。
2. 12c版本的已知Bug?
Oracle 12c部分版本存在sdo_aggr_union()处理带内环多边形的拓扑计算错误,会误填充未被覆盖的孔洞。可通过Oracle Support文档(如Doc ID 2075443.1)确认是否属于已记录的Bug。
3. 保留内环的替代方案
若需合并图形且保留未被覆盖的孔洞,可尝试以下方法:
- 分步处理:先对所有外轮廓执行
sdo_aggr_union(),单独提取所有内环,再用sdo_geom.add_elem()将内环作为孔洞添加到合并后的外轮廓中。 - 升级版本:升级至Oracle 18c及以上版本,该版本优化了空间聚合的拓扑计算,修复了12c的部分相关Bug。
- 自定义聚合逻辑:通过PL/SQL编写自定义函数,手动分离每个图形的外轮廓与内环,执行合并后重新组合孔洞元素。
图形示例
原始图形(带切口和内环):
sdo_aggr_union()执行结果(孔洞被填充):
内容的提问来源于stack exchange,提问作者ffxx68
相关产品推荐
相关产品推荐

