ST_PointN
Name
ST_PointN — Returns the Nth point in the first LineString or circular LineString in a geometry.
Synopsis
    
     geometry
     
      ST_PointN
     
     (
    
    geometry
    
     a_linestring
    
    , integer
    
     n
    
    
     )
    
    ;
   
Description
Return the Nth point in a single linestring or circular linestring in the geometry. Negative values are counted backwards from the end of the LineString, so that -1 is the last point. Returns NULL if there is no linestring in the geometry.
       
      | 
     |
| 
       Index is 1-based as for OGC specs since version 0.8.0. Backward indexing (negative index) is not in OGC Previous versions implemented this as 0-based instead.  | 
    
       
      | 
     |
| 
       If you want to get the Nth point of each LineString in a MultiLineString, use in conjunction with ST_Dump  | 
    
   
    
   
   This method implements the
   
    OpenGIS Simple Features
 Implementation Specification for SQL 1.1.
   
  
   
    
   
   This method implements the SQL/MM specification. SQL-MM 3: 7.2.5, 7.3.5
  
   
    
   
   This function supports 3d and will not drop the z-index.
  
   
    
   
   This method supports Circular Strings and Curves
  
       
      | 
     |
| 
       Changed: 2.0.0 no longer works with single geometry multilinestrings. In older versions of PostGIS -- a single line multilinestring would work happily with this function and return the start point. In 2.0.0 it just returns NULL like any other multilinestring. Changed: 2.3.0 : negative indexing available (-1 is last point)  | 
    
Examples
-- Extract all POINTs from a LINESTRING
SELECT ST_AsText(
   ST_PointN(
	  column1,
	  generate_series(1, ST_NPoints(column1))
   ))
FROM ( VALUES ('LINESTRING(0 0, 1 1, 2 2)'::geometry) ) AS foo;
 st_astext
------------
 POINT(0 0)
 POINT(1 1)
 POINT(2 2)
(3 rows)
--Example circular string
SELECT ST_AsText(ST_PointN(ST_GeomFromText('CIRCULARSTRING(1 2, 3 2, 1 2)'), 2));
 st_astext
------------
 POINT(3 2)
(1 row)
SELECT ST_AsText(f)
FROM ST_GeomFromText('LINESTRING(0 0 0, 1 1 1, 2 2 2)') AS g
  ,ST_PointN(g, -2) AS f; -- 1 based index
    st_astext
-----------------
 POINT Z (1 1 1)
(1 row)