db.silva.inrae.fr/db_biljou_param - db_biljou_param on db.silva.inrae.fr
Previous topic Chapter index Next topic

Function: ps_genere_xy

 

 

Schema

public

 

Owner

biljou_param

 

Descriptions

Procédure permettant de générer le listing cle;x;y nécessaire au logiciel ONDINE. On laisse à l'appelant (Ondine) la charge de fournir le nom de la table et le type de géométrie qu'elle contient. (voir aussi ps_informations_geometrie)

 

Options

Option

Value

Returns

Set of record

Language

plpgsql

Parameters

nom_table varchar

type_geometrie varchar

out cle double precision

out x double precision

out y double precision

 

Definition

CREATE OR REPLACE FUNCTION public.ps_genere_xy (
 nom_table varchar,
 type_geometrie varchar,
 out cle double precision,
 out x double precision,
 out y double precision
)
RETURNS SETOF record LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
PARALLEL UNSAFE
COST
100 ROWS 1000
AS
$span$
DECLARE
 curs_xy refcursor; -- Curseur recevant les informations XY
 rec_xy record; -- Enregistrement contenant la ligne (champ) en cours de traitement
 requete varchar; -- Chaine pour la constructiondes requetes

BEGIN
 --vérification table
 if ps_existe_table('public',nom_table) = FALSE THEN
  cle = 'erreur ps_genere_xy : table inexistante';
   return next;
  return;
 end if;

 case type_geometrie
  WHEN 'raster' THEN
    requete ='SELECT val::varchar as cle, st_x(geom)::double precision as x, st_y(geom)::double precision as y
        FROM (SELECT dp.* FROM '
|| nom_table|| ', LATERAL ST_PixelAsCentroids(rast, 1) AS dp) foo';
   WHEN 'point' THEN
    requete ='SELECT id_geom::varchar as cle, st_x(geom)::double precision as x, st_y(geom)::double precision as y FROM ' || nom_table;
   WHEN 'polygone' THEN
   -- On utilise a fonction ST_PointOnSurface et non ST_Centroid pour être certain d'obtenir un point à l'intérieur du polygone
       -- (cf https://postgis.net/docs/ST_PointOnSurface.html)

    requete = 'select id_geom::varchar as cle, st_x(centre)::double precision as x, st_y(centre)::double precision as y from (select id_geom,centre
        from '
|| nom_table|| ', LATERAL ST_PointOnSurface(geom) as centre) foo;' ;
   ELSE --Erreur
    cle = 'erreur ps_genere_xy : type de geometrie incorrect : ' || type_geometrie ;
    return next;
  return;
 end case ;

 
 open curs_xy FOR EXECUTE(requete) ;
   LOOP
     FETCH curs_xy into rec_xy;
         if found then
          cle = rec_xy.cle;
           x = rec_xy.x;
          y = rec_xy.y;
           return next;
         ELSE
          exit
;
         end if;
   end loop;
 
 
EXCEPTION
WHEN
OTHERS THEN
  raise exception
'Erreur ps_genere_xy - %', sqlerrm;
END;
$span$;

COMMENT ON FUNCTION public.ps_genere_xy(nom_table varchar, type_geometrie varchar, out cle double precision, out x double precision, out y double precision)
IS 'Procédure permettant de générer le listing cle;x;y nécessaire au logiciel ONDINE. On laisse à l''appelant (Ondine) la charge de fournir le nom de la table et le type de géométrie qu''elle contient. (voir aussi ps_informations_geometrie)';

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