remove_duplicate_vertices 在 Oracle Spatial 中将 polygon/multipolygon 类型转换为集合,如何将它们转换回多面体?

remove_duplicate_vertices in Oracle Spatial converted polygon/multipolygon types to collections, How do I convert these back to multipolygons?

我在包含多边形和多边形的空间 table 上有 运行 REMOVE_DUPLICATE_VERTICES,现在有 6 个几何图形标记为 Collection (2004)。我怎样才能安全地将这些改回多边形?

示例之一(坐标数组缩短)

MDSYS.SDO_GEOMETRY(2004,8307,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1,5,1003,1,13,1003,1,21,1003,1,279,2003,1,581 ,2003,1,961,2003,1,1551,2003,1,2073,2003,1,2215,2003,1,2277,2003,1,2349,2003,1,2379,2003,1,2671,2003,1 ,2847,2003,1,3033,2003,1,3145,2003,1,3263,2003,1,3271,2003,1,3403,2003,1),MDSYS.SDO_ORDINATE_ARRAY(-89.60549292,-1.30359069399998, ...,-89.6571104179999,-0.900517332999925))

一种方法是:

declare wgeom mdsys.sdo_geometry; outgeom mdsys.sdo_geometry; 
begin
for i in 1 .. nvl(sdo_util.getNumElem(ingeom)  ,0) 
loop
  wgeom := sdo_util.extract(ingeom, i, 0);  

  if wgeom.get_gtype() in (3,7) then  
  outgeom := sdo_util.append(outgeom, wgeom);          
  end if;

end loop;

它循环遍历几何元素,并为每个多边形元素附加一个几何变量。你可以把它放在一个函数中,你 'feed' 与你的几何(这应该是一个有效的几何)并输出过滤后的 outgeom.
我使用这种方法是因为很容易将逻辑放入循环中以过滤掉例如某区域e.t.c下的元素。我在生产中使用了数百万个几何图形。
如果您需要进一步的帮助,请告诉我。