STSplit

STSplit — Function that splits a line into two parts.

Function Specification.

Function [lrs].[STSplit] (
                  @p_linestring geometry,
                  @p_point      geometry,
                  @p_round_xy   int = 3,
                  @p_round_zm   int = 2
         )
Returns @lines TABLE
(
  line1 geometry,
  line2 geometry
)

Description.

Splits @p_linestring at position defined by @p_point.

If @p_point is not on the line it is first snapped to the line.

Supports CircularString and CompoundCurve geometry objects and subelements from 2012 onewards.

Parameters.

    @p_linestring (geometry) - Supplied Linestring geometry.
    @p_point      (geometry) - Supplied split point.
    @p_round_xy        (int) - Decimal degrees of precision for when formatting XY ordinates in WKT.
    @p_round_zm        (int) - Decimal degrees of precision for when formatting Z ordinate in WKT.

Result.

Returns a single record containing one or two linestrings

Example.

with data as (
  select geometry::STGeomFromText('LINESTRING(0 0,10 10,20 20,30 30,40 40,50 50,60 60,70 70,80 80,90 90,100 100)',0) as line,
         geometry::STGeomFromText('POINT(50 51)',0) as point
)
select s.line1.AsTextZM() as line1, s.line2.AsTextZM() as line2
  from data as a
       cross apply 
       [lrs].STSplit(
             a.line,
             a.point,
             3,
             2
       ) as s;

line1                                                          line2
LINESTRING (0 0, 10 10, 20 20, 30 30, 40 40, 50 50, 50.5 50.5) LINESTRING (50.5 50.5, 60 60, 70 70, 80 80, 90 90, 100 100)