ST_MakeLine
Prev | 8.3. Geometry Constructors | Next

## Name

ST_MakeLine — Creates a LineString from Point, MultiPoint, or LineString geometries.

## Synopsis

`geometry ST_MakeLine(`geometry geom1, geometry geom2`)`;

`geometry ST_MakeLine(`geometry[] geoms_array`)`;

`geometry ST_MakeLine(`geometry set geoms`)`;

## Description

Creates a LineString containing the points of Point, MultiPoint, or LineString geometries. Other geometry types cause an error.

Variant 1: accepts two input geometries

Variant 2: accepts an array of geometries

Variant 3: aggregate function accepting a rowset of geometries. To ensure the order of the input geometries use `ORDER BY` in the function call, or a subquery with an `ORDER BY` clause.

Repeated nodes at the beginning of input LineStrings are collapsed to a single point. Repeated points in Point and MultiPoint inputs are not collapsed. ST_RemoveRepeatedPoints can be used to collapse repeated points from the output LineString.

This function supports 3d and will not drop the z-index.

Availability: 2.3.0 - Support for MultiPoint input elements was introduced

Availability: 2.0.0 - Support for LineString input elements was introduced

Availability: 1.4.0 - ST_MakeLine(geomarray) was introduced. ST_MakeLine aggregate functions was enhanced to handle more points faster.

## Examples: Two-input variant

Create a line composed of two points.

    SELECT ST_AsText( ST_MakeLine(ST_Point(1,2), ST_Point(3,4)) );

    	  st_astext
    ---------------------
     LINESTRING(1 2,3 4)

Create a 3D line from two 3D points.

    SELECT ST_AsEWKT( ST_MakeLine(ST_MakePoint(1,2,3), ST_MakePoint(3,4,5) ));

    		st_asewkt
    -------------------------
     LINESTRING(1 2 3,3 4 5)

Create a line from two disjoint LineStrings.

     select ST_AsText( ST_MakeLine( 'LINESTRING(0 0, 1 1)', 'LINESTRING(2 2, 3 3)' ) );

              st_astext
    -----------------------------
     LINESTRING(0 0,1 1,2 2,3 3)

## Examples: Array variant

Create a line from an array formed by a subquery with ordering.

    SELECT ST_MakeLine( ARRAY( SELECT ST_Centroid(geom) FROM visit_locations ORDER BY visit_time) );

Create a 3D line from an array of 3D points

    SELECT ST_AsEWKT( ST_MakeLine(
              ARRAY[ ST_MakePoint(1,2,3), ST_MakePoint(3,4,5), ST_MakePoint(6,6,6) ]  ));

    		st_asewkt
    -------------------------
    LINESTRING(1 2 3,3 4 5,6 6 6)

## Examples: Aggregate variant

This example queries time-based sequences of GPS points from a set of tracks and creates one record for each track. The result geometries are LineStrings composed of the GPS track points in the order of travel.

Using aggregate `ORDER BY` provides a correctly-ordered LineString.

    SELECT gps.track_id, ST_MakeLine(gps.geom ORDER BY gps_time) As geom
    	FROM gps_points As gps
    	GROUP BY track_id;

Prior to PostgreSQL 9, ordering in a subquery can be used. However, sometimes the query plan may not respect the order of the subquery.

    SELECT gps.track_id, ST_MakeLine(gps.geom) As geom
    	FROM ( SELECT track_id, gps_time, geom
    			FROM gps_points ORDER BY track_id, gps_time ) As gps
    	GROUP BY track_id;

## See Also

ST_RemoveRepeatedPoints, ST_AsEWKT, ST_AsText, ST_GeomFromText, ST_MakePoint, ST_Point

Prev | Up | Next
ST_MakeEnvelope | Home | ST_MakePoint