Visualising the Topological Relations of LineStrings
Introduction
The Oracle Spatial documentation includes examples of the different types of spatial relationships for polygons. This is in the section 1.8 Spatial Relationships and Filtering, in particular Figure 1-6 Topological Relationships.
I recently had to work on matching two road centreline databases and so generated an equivalent set of examples for two linestrings.
LineString Topological Relationships
The relationships were generated by the following SQL Select statement. The results were visualised in SQL Developer using GeoRaptor.
with base as ( select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,2,2)) as geom from dual ), data as ( select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(-1,-1,0,0)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(-1,-1,1,1)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(-1,-1,2,2)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(-1,-1,3,3)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,2,2)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0.5,0.5,1.5,1.5)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(1,1,2,2)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0,0,3,3)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(1,1,3,3)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(2,2,3,3)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0.5,2,1,1,2,2)) as geom from dual union all select sdo_geometry(2002,null,null,sdo_elem_info_array(1,2,1),sdo_ordinate_array(0.5,2,1,1,1.5,1.5,2,1)) from dual ) select 'Black ' || sdo_geom.relate(b.geom,'DETERMINE',d.geom,0.05) || ' Gray' as relationship, sdo_geom.sdo_union(d.geom,sdo_util.PolygonToLine(sdo_geom.sdo_buffer(b.geom,0.1,0.0005)),0.0005) as image from base b, data d Order by relationship
The results grouped by relationship and including visualisation images, are:
RELATIONSHIP | IMAGE |
---|---|
Black CONTAINS Gray | |
Black COVEREDBY Gray | |
Black COVERS Gray | |
Black EQUAL Gray | |
Black INSIDE Gray | |
Black OVERLAPBDYDISJOINT Gray | |
Black OVERLAPBDYINTERSECT Gray | |
Black TOUCH Gray |