STSplitProcedure

STSplitProcedure — Procedure that splits a line into two parts.

Function Specification.

Function [lrs].[STSplitProcedure] (
                  @p_linestring geometry,
                  @p_point      geometry,
                  @p_line1      geometry OUTPUT,
                  @p_line2      geometry OUTPUT,
                  @p_round_xy   int = 3,
                  @p_round_zm   int = 2
         )
Returns 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.

Honours measures.

Parameters.

    @p_linestring (geometry) - Supplied Linestring geometry.
    @p_point      (geometry) - Supplied split point.
    @p_line1      (geometry) - Is an OUTPUT parameter that holds the first part of split line.
    @p_line2      (geometry) - Is an OUTPUT parameter that holds the second part of split line.
    @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 two parts of split linestring.

Example.

declare @v_linestring geometry = 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),
        @v_point      geometry = geometry::STGeomFromText('POINT(50 51)',0),
        @v_line1      geometry,
        @v_line2      geometry;
exec [lrs].[STSplitProcedure] @p_linestring=@v_linestring,
                          @p_point=@v_point,
                          @p_line1=@v_line1 OUTPUT,
                          @p_line2=@v_line2 OUTPUT,
                          @p_round_xy=3,
                          @p_round_zm=2;
select @v_line1.STAsText() as line1, @v_line2.STAsText() as line2
GO

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)