35.1 SDO_UTIL.AFFINETRANSFORMS
Format
SDO_UTIL.AFFINETRANSFORMS( geometry IN SDO_GEOMETRY, translation IN VARCHAR2 DEFAULT 'FALSE', tx IN NUMBER DEFAULT 0.0, ty IN NUMBER DEFAULT 0.0, tz IN NUMBER DEFAULT 0.0, scaling IN VARCHAR2 DEFAULT 'FALSE', psc1 IN SDO_GEOMETRY DEFAULT NULL, sx IN NUMBER DEFAULT 0.0, sy IN NUMBER DEFAULT 0.0, sz IN NUMBER DEFAULT 0.0, rotation IN VARCHAR2 DEFAULT 'FALSE', p1 IN SDO_GEOMETRY DEFAULT NULL, line1 IN SDO_GEOMETRY DEFAULT NULL, angle IN NUMBER DEFAULT 0.0, dir IN NUMBER DEFAULT -1, shearing IN VARCHAR2 DEFAULT 'FALSE', shxy IN NUMBER DEFAULT 0.0, shyx IN NUMBER DEFAULT 0.0, shxz IN NUMBER DEFAULT 0.0, shzx IN NUMBER DEFAULT 0.0, shyz IN NUMBER DEFAULT 0.0, shzy IN NUMBER DEFAULT 0.0, reflection IN VARCHAR2 DEFAULT 'FALSE', pref IN SDO_GEOMETRY DEFAULT NULL, lineR IN SDO_GEOMETRY DEFAULT NULL, dirR IN NUMBER DEFAULT -1, planeR IN VARCHAR2 DEFAULT 'FALSE', n IN SDO_NUMBER_ARRAY DEFAULT NULL, bigD IN SDO_NUMBER_ARRAY DEFAULT NULL ) RETURN SDO_GEOMETRY;
Description
Returns a geometry that reflects an affine transformation of the input geometry.
Parameters
- geometry
-
Input geometry on which to perform the affine transformation.
- translation
-
A string value of
TRUE
causes translation to be performed; a string value ofFALSE
(the default) causes translation not to be performed. If this parameter isTRUE
, translation is performed about the point at (tx,ty) or (tx,ty,tz). - tx
-
X-axis value for translation. The default value is 0.0.
- ty
-
Y-axis value for translation. The default value is 0.0.
- tz
-
Z-axis value for translation. The default value is 0.0.
- scaling
-
A string value of
TRUE
causes scaling to be performed; a string value ofFALSE
(the default) causes scaling not to be performed. - psc1
-
Point on the input geometry about which to perform the scaling. If
scaling
isTRUE
, this geometry should be either a zero point (point geometry with 0,0 or 0,0,0 ordinates for scaling about the origin) or a nonzero point (point geometry with ordinates for scaling about a point other than the origin). Ifscaling
isFALSE
,psc1
can be a null value. - sx
-
X-axis value for scaling (about either the point specified in the
psc1
parameter or the origin). The default value is 0.0. - sy
-
Y-axis value for scaling (about either the point specified in the
psc1
parameter or the origin). The default value is 0.0. - sz
-
Z-axis value for scaling (about either the point specified in the
psc1
parameter or the origin). The default value is 0.0. - rotation
-
A string value of
TRUE
causes rotation to be performed; a string value ofFALSE
(the default) causes rotation not to be performed.For two-dimensional geometries, rotation uses the
p1
andangle
values. For three-dimensional geometries, rotation uses either theangle
anddir
values or theline1
andangle
values. - p1
-
Point for two-dimensional geometry rotation about a specified point.
- line1
-
Line for rotation about a specified axis.
- angle
-
Angle rotation parameter (in radians) for rotation about a specified axis or about the X, Y, or Z axis. The default value is 0.0.
- dir
-
Rotation parameter for x(0), y(1), or z(2)-axis roll. If the
rotation
parameter value isTRUE
but thedir
parameter is not used, use a value of -1 (the default) - shearing
-
A string value of
TRUE
causes shearing to be performed; a string value ofFALSE
(the default) causes shearing not to be performed.For two-dimensional geometries, shearing uses the
shxy
andshyx
parameter values. For three-dimensional geometries, shearing uses theshxy
,shyx
,shxz
,shzx
,shyz
, andshzy
parameter values. - shxy
-
Value for shearing due to X along the Y direction. The default value is 0.0.
- shyx
-
Value for shearing due to Y along the X direction. The default value is 0.0.
- shxz
-
Value for shearing due to X along the Z direction (three-dimensional geometries only). The default value is 0.0.
- shzx
-
Value for shearing due to Z along the X direction (three-dimensional geometries only).
- shyz
-
Value for shearing due to Y along the Z direction (three-dimensional geometries only).
- shzy
-
Value for shearing due to Z along the Y direction (three-dimensional geometries only).
- reflection
-
A string value of
TRUE
causes reflection to be performed; a string value ofFALSE
(the default) causes reflection not to be performed.For two-dimensional geometries, reflection uses the
lineR
value for reflection about an axis and thepref
value for the centroid for self-reflection. For three-dimensional geometries, reflection uses thelineR
value for reflection about an axis; thedirR
value for reflection about the yz, xz, and xy planes; theplaneR
,n
, andbigD
values for reflection about a specified plane; and thepref
value for the centroid for self-reflection. - pref
-
Point through which to perform reflection.
- lineR
-
Line along which to perform reflection.
- dirR
-
Number indicating the plane about (through) which to perform reflection: 0 for the yz plane, 1 for the xz plane, or 2 for the xy plane. If the
reflection
parameter value isTRUE
but thedirR
parameter is not used, use a value of -1 (the default). - planeR
-
A string value of
TRUE
causes reflection about an arbitrary plane to be performed; a string value ofFALSE
(the default) causes reflection about an arbitrary plane not to be performed. - n
-
Normal vector of the plane.
- bigD
-
Delta value for the plane equation in three-dimensional geometries.
For three-dimensional geometries,
bigD
= delta andn
= (A,B,C) wheren
is the normal of the plane in three-dimensional space. Thus, the plane equation is:Ax+By+Cz+bigD = 3DDotProd(n,anypointonplane)+bigD = 0
Usage Notes
Note:
The SDO_UTIL.AFFINETRANSFORMS function is supported only if Oracle JVM is enabled on your Oracle Autonomous Database Serverless deployments. To enable Oracle JVM, see Use Oracle Java in Using Oracle Autonomous Database Serverless for more information.The order of affine transforms matter because these are matrix and vector multiplications.
You should validate the resulting geometry using the SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT function.
Examples
The following example performs an affine transformation on a two-dimensional geometry.
-- Polygon reflection in 2D about a specified line segment SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), line1 => NULL, angle => -2.35253274913915, dir => -1, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'FALSE', pref => NULL, lineR => NULL, dirR => 0, planeR => 'FALSE', n => NULL, bigD => NULL ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
The following is a simplified version of the preceding example, using the default values for most parameters.
-- Simpler form, using most default values SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => sdo_geometry (2003,8307,null,sdo_elem_info_array (1,1003,1), sdo_ordinate_array (0,2,2,0,5,3,3,5,0,2)), rotation => 'TRUE', p1 => sdo_geometry (2001,8307,sdo_point_type(0,2,null),null,null), angle => -2.35253274913915 ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>SDO_GEOMETRY(2003,8307,NULL,SDO_ELEM_INFO_AR -------------------------------------------------------------------------------- SDO_GEOMETRY(2003, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(0, 2, -2.8284082, 1.98964306, -2.8128727, -2.2529692, .015535417, -2.2426122, 0, 2))
The following example performs an affine transformation on a three-dimensional geometry.
-- Polygon reflection in 3D about a specified plane (z=1 plane in this example) SELECT SDO_UTIL.AFFINETRANSFORMS( geometry => MDSYS.SDO_GEOMETRY(3003, 0, NULL, MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1), MDSYS.SDO_ORDINATE_ARRAY( 1.5,0,0, 2.5,1,0, 1.5,2,0, 0.5,2,0, 0.5,0,0, 1.5,0,0)), translation => 'FALSE', tx => 0.0, ty => 0.0, tz => 0.0, scaling => 'FALSE', psc1 => NULL, sx => 0.0, sy => 0.0, sz => 0.0, rotation => 'FALSE', p1 => NULL, line1 => NULL, angle => 0.0, dir => 0, shearing => 'FALSE', shxy => 0.0, shyx => 0.0, shxz => 0.0, shzx => 0.0, shyz => 0.0, shzy => 0.0, reflection => 'TRUE', pref => NULL, lineR => NULL, dirR => -1, planeR => 'TRUE', n => SDO_NUMBER_ARRAY(0.0, 0.0, 1.0), bigD => SDO_NUMBER_ARRAY(-1.0) ) FROM DUAL; SDO_UTIL.AFFINETRANSFORMS(GEOMETRY=>MDSYS.SDO_GEOMETRY(3003,0,NULL,MDSYS.SDO_ELE -------------------------------------------------------------------------------- SDO_GEOMETRY(3003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARR AY(1.5, 0, 2, 2.5, 1, 2, 1.5, 2, 2, .5, 2, 2, .5, 0, 2, 1.5, 0, 2))
Related Topics
Parent topic: SDO_UTIL Package (Utility)