Converts a curved geometry to its linear approximation. CircularString inputs return a LineString; CurvedPolygon inputs return a Polygon.
Syntax
geometry ST_CurveToLine(geometry curveGeom, float tolerance, integer toleranceType, integer flags);Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
curveGeom | geometry | The curved geometry to convert. | — |
tolerance | float | The tolerance value. Its meaning depends on toleranceType. | 0 |
toleranceType | integer | Determines how tolerance is interpreted. See toleranceType values. | 0 |
flags | integer | A bitfield that controls output symmetry. See flags values. | 0 |
toleranceType values
| Value | Meaning |
|---|---|
0 (default) | Maximum number of segments per quadrant. |
1 | Maximum deviation between the approximated line and the original curve, in source units. |
2 | Maximum angle in radians between generated radii. |
flags values
| Value | Meaning |
|---|---|
0 (default) | No special output behavior. |
1 | Produces a symmetric output regardless of curve direction. |
2 | Retains angles to prevent angle or segment lengths from being reduced during symmetric output generation. Has no effect when the symmetric output flag (1) is not set. |
Return value
The return type depends on the input geometry:
| Input type | Return type |
|---|---|
| CircularString | LineString |
| CurvedPolygon | Polygon |
Description
ST_CurveToLine converts each curved geometry or curved segment into a linear approximation. By default (toleranceType=0, tolerance=0), each quarter circle is divided into 32 segments.
Use this function when a downstream tool or system does not support CircularString geometry.
Examples
Default conversion
Convert a CircularString using the default settings (32 segments per quadrant):
SELECT ST_AsText(ST_CurveToLine('CIRCULARSTRING(0 0, 0.5 0.5, 1 0)'::geometry));Comparing default and custom tolerance
The following query runs two conversions side by side — one with default settings and one with a custom angle tolerance — so you can compare the output vertex counts:
SELECT
ST_CurveToLine(g), -- Default: 32 segments per quadrant
ST_CurveToLine(g, pi()/4, 2) -- toleranceType 2: max angle of pi/4 radians (45 degrees) between radii
FROM (
SELECT 'CIRCULARSTRING(0 0, 0.5 0.5, 1 0)'::geometry AS g
) AS test;
