Posted on

STScaleMeasure

STScaleMeasure is a function that rescales a geometry’s measures and optionally offsets them, stretching the geometry.

TSQL Function Signature.

Function [lrs].[STScaleMeasure] (
           @p_geometry      geometry,
           @p_start_measure Float,
           @p_end_measure   Float,
           @p_shift_measure Float = 0.0,
           @p_round_xy      int = 3,
           @p_round_zm      int = 2
         )
Returns geometry 

Description.

This function can redistribute measure values between the supplied
@p_start_measure (start vertex) and @p_end_measure (end vertex) by adjusting/scaling
the measure values of all in between coordinates.

In addition, if @p_shift_measure is not 0 (zero), the supplied value is added to each
modified measure value performing a translation/shift of those values.

Notes.

See also STScale for the scaling (multiplication) of a geometry’s M ordinate.

Parameters.

    @p_geometry   (geometry) - Supplied Linestring geometry.
    @p_start_measure (float) - Measure defining start point for geometry.
    @p_end_measure   (float) - Measure defining end point for geometry.
    @p_shift_measure (float) - Shift (scale) value applied to all measure.
    @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 input geometry with all its M ordinates scaled using the supplied @p_start_measure, @p_end_measure, and @p_shift_measure parameters.

Example.

WITH data AS (
  SELECT [$(lrsowner)].[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 'Scaled' as LineType,
       [$(lrsowner)].[STScaleMeasure] ( f.ageom, 100.0, 125.1, 5.0, 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))
Scaled   COMPOUNDCURVE (CIRCULARSTRING (3 6.3 1.1 105, 0 7 1.1 108.852, -3 6.3 1.1 112.704), (-3 6.3 1.1 112.704, 0 0 1.4 121.402, 3 6.3 1.6 125.1))
Leave a Reply

Your email address will not be published. Required fields are marked *