Skip to Main Content

Database Software

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Fix self-intersecting polygons merging overlapping areas

856652Oct 1 2012 — edited Oct 5 2012
Hi all,
I have a question about self-intersecting polygons with Oracle spatial.

In general it is recommended to have valid geometries so I need to fix those self-intersecting polygons. If I use the function SDO_UTIL.RECTIFY_GEOMETRY or if I use a self union (SDO_GEOM.SDO_UNION(geom, geom, 0.0f)), it creates a valid geometry but not the one I expect, because it cuts out the overlapping area. I want to have the overlapping area merged. Is there a way to achieve this with PL/sQL functions?

To get in more detail I have some examples. First the geometry with overlapping areas:
select 
  SDO_GEOMETRY(2003, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(0,1, 4,1, 4,4, 1,4, 1,0, 2,0, 2,3, 3,3, 3,2, 0,2, 0,1)
  )
from DUAL;

Result of this looks like a lanyard (# marks the polygon area where X marks the area which overlaps):
   # # #
   #   #
 # X # #
   #
 
If I rectify this or create a self union, the overlapping area is cut out
select SDO_UTIL.RECTIFY_GEOMETRY(
  SDO_GEOMETRY(2003, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(0,1, 4,1, 4,4, 1,4, 1,0, 2,0, 2,3, 3,3, 3,2, 0,2, 0,1)
  ), 0.05)
from DUAL;

   # # #
   #   #
 #   # #
   #
What I need is a polygon that looks like this:
select 
  SDO_GEOMETRY(2007, NULL, NULL, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1, 23, 2003, 1), 
    SDO_ORDINATE_ARRAY(0,1, 1,1, 1,0, 2,0, 2,1, 4,1, 4,4, 1,4, 1,2, 0,2, 0,1, 2,2, 2,3, 3,3, 3,2, 2,2)
  )
from DUAL;

   # # #
   #   #
 # # # #
   #
So my question here is there a function which is able to "rectify" it as I want?

Regards,
Markus
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Nov 2 2012
Added on Oct 1 2012
8 comments
2,597 views