ST_Scale — Skalar en geometri med givna faktorer.
geometry ST_Scale(geometry geomA, float XFactor, float YFactor, float ZFactor);
geometry ST_Scale(geometry geomA, float XFactor, float YFactor);
geometry ST_Scale(geometry geom, geometry factor);
geometry ST_Scale(geometry geom, geometry factor, geometry origin);
Skalar geometrin till en ny storlek genom att multiplicera ordinaterna med motsvarande faktorparametrar.
Den version som tar en geometri som faktorparameter gör det möjligt att skicka en 2d-, 3dm-, 3dz- eller 4d-punkt för att ställa in skalningsfaktorn för alla dimensioner som stöds. Saknade dimensioner i faktorpunkten motsvarar ingen skalning av motsvarande dimension.
Varianten med tre geometrier gör det möjligt att ange ett "falskt ursprung" för skalningen. Detta möjliggör "skalning på plats", t.ex. genom att geometrins centroid används som falskt ursprung. Utan ett falskt ursprung sker skalningen i förhållande till det faktiska ursprunget, så alla koordinater multipliceras bara med skalfaktorn.
|
|
|
Före 1.3.4 kraschade den här funktionen om den användes med geometrier som innehåller CURVES. Detta är åtgärdat i 1.3.4+ |
Tillgänglighet: 1.1.0.
Förbättrad: 2.0.0 stöd för polyhedrala ytor, trianglar och TIN infördes.
Förbättrad i 2.2.0: stöd för skalning av alla dimensioner med parametern factor infördes.
Förbättrad: 2.5.0 stöd för skalning i förhållande till ett lokalt ursprung (origin-parametern) infördes.
Denna funktion stöder polyedriska ytor.
Denna funktion stöder 3d och kommer inte att tappa z-index.
Denna metod stöder cirkulära strängar och kurvor.
Denna funktion stöder trianglar och triangulerade oregelbundna nätverksytor (TIN).
Denna funktion stöder M-koordinater.
Det här exemplet skalar X-, Y- och Z-värden.
SELECT ST_Scale('LINESTRING(1 2 3,1 1 1)', 0.5, 0.75, 0.8);
LINESTRING(0.5 1.5 2.4,0.5 0.75 0.8)
Det här exemplet skalar X- och Y-värden.
SELECT ST_Scale('LINESTRING(1 2 3,1 1 1)', 0.5, 0.75);
LINESTRING(0.5 1.5 3,0.5 0.75 1)
Det här exemplet skalar X-, Y-, Z- och M-värden.
SELECT ST_Scale('LINESTRING(1 2 3 4,1 1 1 1)',
ST_MakePoint(0.5, 0.75, 2, -1));
LINESTRING(0.5 1.5 6 -4,0.5 0.75 2 -1)
Det här exemplet skalar X- och Y-värden med en falsk origo.
SELECT ST_Scale('LINESTRING(1 1,2 2)', 'POINT(2 2)', 'POINT(1 1)'::geometry);
LINESTRING(1 1,3 3)
Det här exemplet skapar en ellips med centrum i (10, 20), X-radien 8, Y-radien 4 och en rotation på 30 grader moturs. Skalning och rotation använder centrum som origo, så ellipsen behåller både sin position och sitt SRID.
WITH params AS (
SELECT
ST_SetSRID(ST_Point(10, 20), 3857) AS center,
8.0 AS x_radius,
4.0 AS y_radius,
radians(30) AS angle
)
SELECT ST_Rotate(
ST_Scale(
ST_Buffer(center, 1, 'quad_segs=32'),
ST_MakePoint(x_radius, y_radius),
center
),
angle,
center
) AS ellipse
FROM params;
ST_Affine, ST_Buffer, ST_MakePoint, ST_Rotate, ST_TransScale