Name

ST_PointN — Renvoie le Nième point de la première LineString ou LineString circulaire d'une géométrie.

Synopsis

geometry ST_PointN(geometry a_linestring, integer n);

Description

Renvoie le Nième point d'une ligne ou d'une ligne circulaire dans la géométrie. Les valeurs négatives sont comptées à rebours à partir de la fin de la LineString, de sorte que -1 est le dernier point. Renvoie NULL s'il n'y a pas de ligne dans la géométrie.

[Note]

L'index est basé sur 1 comme pour les spécifications de l'OGC depuis la version 0.8.0. L'indexation à rebours (index négatif) n'est pas prévue dans les spécifications de l'OGC. Les versions précédentes l'ont implémentée en la basant sur 0.

[Note]

Si vous souhaitez obtenir le Nième point de chaque ligne dans une multiligne, utilisez ST_Dump en conjonction avec ST_Dump

Cette méthode implémente la spécification OGC Simple Features Implementation Specification for SQL 1.1.

Cette méthode implémente la spécification SQL/MM.

SQL-MM 3 : 7.2.5, 7.3.5

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette méthode prend en charge les types Circular String et Curve.

[Note]

Modifié : la version 2.0.0 ne fonctionne plus avec les multi-lignes à géométrie unique. Dans les anciennes versions de PostGIS, une multi-ligne d'une seule ligne fonctionnait parfaitement avec cette fonction et renvoyait le point de départ. Dans la version 2.0.0, elle renvoie simplement NULL comme n'importe quelle autre multi-ligne.

Modifié : 2.3.0 : indexation négative disponible (-1 est le dernier point)

Exemples

-- 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)

Voir aussi

ST_NPoints