pggeodb.nancy.inra.fr/db_cefs - db_cefs on pggeodb.nancy.inra.fr
Previous topic Chapter index Next topic

Function: _st_dumppoints

 

 

Schema

public

 

Owner

postgres

 

Descriptions

There is no description for function _st_dumppoints

 

Options

Option

Value

Returns

Set of public.geometry_dump

Language

plpgsql

Parameters

the_geom public.geometry

cur_path integer []

 

Definition

CREATE OR REPLACE FUNCTION public._st_dumppoints (
 the_geom public.geometry,
 cur_path integer []
)
RETURNS SETOF public.geometry_dump AS
$span$
DECLARE

 tmp geometry_dump;
 tmp2 geometry_dump;
 nb_points integer;
 nb_geom integer;
 i integer;
 j integer;
 g geometry;
 
BEGIN
 
 -- RAISE DEBUG '%,%', cur_path, ST_GeometryType(the_geom);

 -- Special case collections : iterate and return the DumpPoints of the geometries


 IF (ST_IsCollection(the_geom)) THEN

   i = 1;
   FOR tmp2 IN SELECT (ST_Dump(the_geom)).* LOOP

     FOR
tmp IN SELECT * FROM _ST_DumpPoints(tmp2.geom, cur_path || tmp2.path) LOOP
   RETURN NEXT tmp;
     END LOOP;
     i = i + 1;
     
   END LOOP;

   RETURN;
 END IF;
 

 -- Special case (POLYGON) : return the points of the rings of a polygon
 IF (ST_GeometryType(the_geom) = 'ST_Polygon') THEN

   FOR
tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
     RETURN NEXT tmp;
   END LOOP;
   
   j := ST_NumInteriorRings(the_geom);
   FOR i IN 1..j LOOP
       FOR
tmp IN SELECT * FROM _ST_DumpPoints(ST_InteriorRingN(the_geom, i), cur_path || ARRAY[i+1]) LOOP
         RETURN NEXT tmp;
       END LOOP;
   END LOOP;
   
   RETURN;
 END IF;

 -- Special case (TRIANGLE) : return the points of the external rings of a TRIANGLE
 IF (ST_GeometryType(the_geom) = 'ST_Triangle') THEN

   FOR
tmp IN SELECT * FROM _ST_DumpPoints(ST_ExteriorRing(the_geom), cur_path || ARRAY[1]) LOOP
     RETURN NEXT tmp;
   END LOOP;
   
   RETURN;
 END IF;

   
 -- Special case (POINT) : return the point
 IF (ST_GeometryType(the_geom) = 'ST_Point') THEN

   tmp.path = cur_path || ARRAY[1];
   tmp.geom = the_geom;

   RETURN NEXT tmp;
   RETURN;

 END IF;


 -- Use ST_NumPoints rather than ST_NPoints to have a NULL value if the_geom isn't
 -- a LINESTRING, CIRCULARSTRING.

 SELECT ST_NumPoints(the_geom) INTO nb_points;

 -- This should never happen
 IF (nb_points IS NULL) THEN
   RAISE EXCEPTION
'Unexpected error while dumping geometry %', ST_AsText(the_geom);
 END IF;

 FOR i IN 1..nb_points LOOP
   tmp.path = cur_path || ARRAY[i];
   tmp.geom := ST_PointN(the_geom, i);
   RETURN NEXT tmp;
 END LOOP;
  
END
$span$
LANGUAGE
'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST
100 ROWS 1000;

This file was generated with SQL Manager for PostgreSQL (www.pgsqlmanager.com) at 13/03/2014 13:23
Previous topic Chapter index Next topic