# 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: