All Products
Search
Document Center

PolarDB:ST_CurveToLine

Last Updated:Mar 28, 2026

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

ParameterTypeDescriptionDefault
curveGeomgeometryThe curved geometry to convert.
tolerancefloatThe tolerance value. Its meaning depends on toleranceType.0
toleranceTypeintegerDetermines how tolerance is interpreted. See toleranceType values.0
flagsintegerA bitfield that controls output symmetry. See flags values.0

toleranceType values

ValueMeaning
0 (default)Maximum number of segments per quadrant.
1Maximum deviation between the approximated line and the original curve, in source units.
2Maximum angle in radians between generated radii.

flags values

ValueMeaning
0 (default)No special output behavior.
1Produces a symmetric output regardless of curve direction.
2Retains 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 typeReturn type
CircularStringLineString
CurvedPolygonPolygon

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;

12