Spatial relationships
In the previous chapter, one spatial relationship function - the ST_Intersects
, was introduced. This is only the beginning of the story; there are many more, finer functions available, to explore the relationships between features more precisely. For more details, read on.
Touching
A geometry is defined as touching when at least its vertex or edge lies on the edge of the reference geometry, but no points are inside its interior.
For example, let's find all the tributaries of the Odra river:
SELECT name,waterway FROM lines WHERE waterway in ('river','stream') AND name != 'Odra' AND ST_Touches( wkb_geometry, (SELECT ST_Collect(wkb_geometry) FROM lines WHERE name = 'Odra') );
The ST_Collect
is needed for collecting all sections into a single geometry (ST_Touches
accepts MultiLineStrings, so there's no need for Union or LineMerge there), and the name != 'Odra'
condition is needed to exclude neighbouring sections of the same river.
Crossing
A geometry is defined as...