STUpdateMeasure

STUpdateMeasure is a TSQL function that re-scales (multi)linestring geometry measures from start to end using provided values.

TSQL Function Specification.

Function [$(lrsowner)].[STUpdateMeasure] (
           @p_linestring    geometry,
           @p_start_measure Float,
           @p_end_measure   Float,
           @p_round_xy      int = 3,
           @p_round_zm      int = 2
         )
Returns geometry 

Description.

This function resets all measures in a measured (multi)linestring by applying @p_start_measure to the start vertex and @p_end_measure to the end vertex.

All vertices in between have the measures scaled between the start and end measures by ratio based on length.

All M ordinates are rounded to supplied @p_round_zm.

Note.

This function is a wrapper over [lrs].[STScaleMeasure].

Parameters.

@p_linestring (geometry) - Supplied (multi)linestring geometry.
@p_start_measure (float) - Measure defining start point for geometry.
@p_end_measure   (float) - Measure defining end point for geometry.
@p_round_xy        (int) - Decimal degrees of precision to which calculated XY ordinates are rounded.
@p_round_zm        (int) - Decimal degrees of precision to which calculated ZM ordinates are rounded.

Result.

The function returns the original input @p_linestring with all vertices M ordinates updated.

Examples.

WITH data AS (
   SELECT [lrs].[STAddMeasure] (
           geometry::STGeomFromText('COMPOUNDCURVE(CIRCULARSTRING (3 6.3246 1.1, 0 7 1.1, -3 6.3246 1.1),(-3 6.3246 1.1, 0 0 1.4, 3 6.3246 1.55))',0),
           0,null,1,1) as aGeom
)
SELECT 'Original' as LineType, 
       f.aGeom.AsTextZM() as mLine
  FROM data as f
UNION ALL
SELECT 'Updated (1)' as LineType,
       [lrs].[STUpdateMeasure] ( f.ageom, 1.0, 21.2, 3, 2).AsTextZM() as sGeom 
  FROM data as f
UNION ALL
SELECT 'Updated (2)' as LineType,
       [lrs].[STUpdateMeasure] ( f.ageom, 100.0, 125.1, 3, 2).AsTextZM() as sGeom 
  FROM data as f;
GO

LineType mLine
-------- ---------------------------------------------------------------------------------------------------------------------------------------
Original	COMPOUNDCURVE (CIRCULARSTRING (3 6.3 1.1 0, 0 7 1.1 3.1, -3 6.3 1.1 6.2), (-3 6.3 1.1 6.2, 0 0 1.4 13.2, 3 6.3 1.6 20.2))
Updated (1)	COMPOUNDCURVE (CIRCULARSTRING (3 6.3 1.1 1, 0 7 1.1 4.1, -3 6.3 1.1 7.2), (-3 6.3 1.1 7.2, 0 0 1.4 14.2, 3 6.3 1.6 21.2))
Updated (2)	COMPOUNDCURVE (CIRCULARSTRING (3 6.3 1.1 100, 0 7 1.1 103.85, -3 6.3 1.1 107.7), (-3 6.3 1.1 107.7, 0 0 1.4 116.4, 3 6.3 1.6 125.1))