Posted on

STScale

STScale is a TSQL function that moves a geometry object’s ordinates using the supplied delta X, Y, Z and M.

Function Specification.

Function [dbo].[STScale] (
           @p_geometry geometry,
           @p_xFactor  float,
           @p_yFactor  float,
           @p_zFactor  float,
           @p_mFactor  float,
           @p_round_xy int = 3,
           @p_round_zm int = 2 
         )
Returns geometry 

Example.

-- XY
SELECT [dbo].[STScale](
               geometry::STGeomFromText('LINESTRING(0.1 0.2,1.4 45.2)',0),
               -5.0,
                3.2,
                NULL,
                NULL,
                3,
                2
       ).AsTextZM() as scaledGeom;

scaledGeom
LINESTRING (-0.5 0.64, -7 144.64)

-- XYZ
SELECT [dbo].[STScale](
               geometry::STGeomFromText('LINESTRING(0.1 0.2 NULL 1.0,1.4 45.2 NULL 45.02)',0),
                NULL,
                NULL,
                NULL,
                1.5,
                3,
                2
       ).AsTextZM() as scaledGeom;

scaledGeom
LINESTRING (0.1 0.2 NULL 1.5, 1.4 45.2 NULL 67.53)

-- XYZM
SELECT [dbo].[STScale](
               geometry::STGeomFromText('LINESTRING(0.1 0.2 0.9 1.0,1.4 45.2 2.1 45.02)',0),
                1.0,
                1.0,
                2.0,
                1.5,
                3,
                2
       ).AsTextZM() as scaledGeom;

scaledGeom
LINESTRING (0.1 0.2 1.8 1.5, 1.4 45.2 4.2 67.53)

Description.

This function scales the supplied geometry’s ordinates using the supplied scale factors.

The computed ordinates of the new geometry are rounded to the appropriate decimal digits of precision.

Parameters.

    @p_geometry (geometry) - supplied geometry of any type.
    @p_xFactor  (double)   - X ordinate scale factor.
    @p_yFactor  (double)   - Y ordinate scale factor.
    @p_zFactor  (double)   - Z ordinate scale factor.
    @p_mFactor  (double)   - M ordinate scale factor.
    @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 XM ordinates are rounded.

Results.

The function returns the input geometry scaled by supplied ordinate factor values.

Leave a Reply

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