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