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

Function: ps_extraction_meteo

 

 

Schema

public

 

Owner

albenard

 

Descriptions

Fonction d'extraction des informations météo (id_maille) pour la création de fichier météo en entrée du modèle biljou

 

Options

Option

Value

Returns

text

Language

plpgsql

Parameters

mode_emprise text

table_tmp text

source_meteo text

table_result text

system_geo_emprise text = NULL::text

nom_geometrie_emprise text = NULL::text

 

Definition

CREATE OR REPLACE FUNCTION public.ps_extraction_meteo (
 mode_emprise text,
 table_tmp text,
 source_meteo text,
 table_result text,
 system_geo_emprise text = NULL::text,
 nom_geometrie_emprise text = NULL::text
)
RETURNS text LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
PARALLEL UNSAFE
COST
100
AS
$span$

-- Auteur : Alain Benard
-- Mises à jour : 01/04/2022 - prise en compte du parametre tolerance lors de l'appel ps_extraction_source
--  09/09/2021 (prise en compte modification appel ps_extraction_source)
-- Cette fonction s'appuie sur une table préalalablement remplie et complétée par la procédure ps_initialise_emprise. Elle construit une table résultat qui contiendra
-- les identifiants de maille météo pour la construction des fichiers météo nécessaires au fonctionnement du modèle biljou.
-- Elle vérifie que la table issue de la phase précédente existe bien, valide que la source météo est correcte et récupère les informations de géométrie de cette source
-- (table contenant le raster et srid du raster)
-- Pour le mode XY : Elle récupère le code srid correspondant au X et Y puis alimente la table résultat en analysant la valeur du pixel dans lequel se situe chaque point X,Y
-- avec éventuellement une transformation (reprojection) si le srid des x,y et différent de celui de la source
-- Pour le mode MAILLE_COMPLETE :

-- Pour le mode MAILLE_PARTIELLE :
--
--
-- paramètres :
-- mode_emprise : 3 modes de choix pour sélectionner l'emmprise :
-- L'opérateur fournit un fichier avec des X et Y en indiquant le système de géoréférencement. (XY)
-- L'opérateur indique une géométrie (voir table tr_geometrie_geo de la base db_biljou_param) avec 2 possibilités :
-- L'ensemble des coordonnées de la géométrie (id_maille) est à prendre en compte (MAILLE_COMPLETE)
-- L'utilisateur fournit en plus un fichier comportant uniquement le id_maille concernés (MAILLE_PARTIELLE)login de l'utilisateur à créer
-- table_tmp : nom de la table préalablement créée par l'appelant et contenant les données des fichiers utilisateurs le cas échéant  (X;Y ou id_maille)

-- source_meteo : Nom de la source météo à analyser (champ src_nom de la table t_source_src)
-- table_result : nom de la table qui contiendra les résultats
-- system_geo_emprise : Système de géoréférencement si l'utilisateur a fourni un fichier X;Y
-- nom_geometrie_emprise : Dans les 2 derniers cas d'usage la fonction doit connaître la géométrie choisie (champ geo_nom de la table tr_geometrie_geo)

-- déclaration des variables de traitements

DECLARE
   requete text; -- Variable permettant de stocker le code SQL de requêtes à exécuter.
status boolean; -- Booléen permettant de tester si une exécution a retourné vrai ou faux
epsg_emprise integer;
curs_table refcursor; -- Curseur recevant les informations de la table / requête à analyser
   rec_table   record; -- Enregistrement contenant la ligne en cours de traitement
table_raster text;
compteur  integer;
id_source_meteo integer;
raster_meteo text;
--epsg_meteo integer;
resultat_extraction text; -- Variable pour stocker le résultat de l'appel de ps_extraction_source

BEGIN

-- Vérification existence table_tmp
 select into status ps_existe_table_temporaire(table_tmp);
 if status = false then
return
'Erreur : la table temporaire' || table_tmp || ' est inexistante.';
 end if;


-- Suppression éventuelle de la table résultat d'un précédent traitement (à renforcer car il pourrait s'agir d'une table permanente : vérif coté temporaire préalable) :
requete = 'drop table if exists ' || table_result || ';' ;
execute requete;

-- Préparation de la table résultat.
requete = 'create temporary table ' || table_result || '
(cle varchar(16)
,x double precision,
y double precision,
id_maille_emprise bigint,
id_maille_meteo bigint,
id_maille_sol bigint,
id_maille_peuplement bigint,
id_maille_altitude bigint,
latitude double precision,
longitude double precision);'
;
execute requete;
 CASE -- Traitement spécifique à chaque mode de traitement
     WHEN mode_emprise = 'XY' THEN
-- Vérification existence systeme géoréférencement et récupération SRID.
select sri_code_epsg into epsg_emprise from tr_srid_sri where sri_nom = system_geo_emprise;
if epsg_emprise is null then
return
'Erreur : le système de géoréférencement ' || system_geo_emprise || ' est inexistant dans la base de données.';
end if;
-- Mise en place des X,Y et cle dans la table resultat
requete = 'insert into ' || table_result || ' (cle,x,y)
select cle,x,y from '
|| table_tmp || ';';
execute requete;
-- Index sur X,Y de la table resultat.
requete = 'create index x_btr_xy_' || table_result || ' on ' || table_result || ' using btree (x,y);';
execute requete;


-- Alimentation table resultat
requete = 'select ps_extraction_source(' || quote_literal(mode_emprise) || ','
|| quote_literal(source_meteo) || ','
|| '''meteo''' || ','
|| quote_literal(table_result) || ','
|| epsg_emprise || ','
|| quote_literal('non concerne')  || ',' -- problème avec valeur null
|| quote_literal('')  || ',' -- filtre : inutile pour la météo
|| 0 || ');'; -- tolerance : inutile pour la météo
execute requete into resultat_extraction;
raise notice 'resultat = % ', resultat_extraction;

if resultat_extraction <> 'ok' then
return
resultat_extraction;
end if;

     WHEN (mode_emprise = 'MAILLE_COMPLETE') or (mode_emprise = 'MAILLE_PARTIELLE' )  THEN
--Vérification de l'existence de la géométrie
select geo_table into table_raster from tr_geometrie_geo where geo_nom = nom_geometrie_emprise;
if table_raster is null then
return
'Erreur : la géométrie ' || nom_geometrie_emprise || ' est inexistante dans la base de données.';
end if;
--Vérification existence table_raster
select into status ps_existe_table('public',table_raster);
if status = false then
return
'Erreur : la table ' || table_raster || ' référencée dans la géométrie ' || nom_geometrie_emprise || ' est inexistante.';
end if;
-- Récupération code epsg du raster.
        requete = 'select st_srid(rast) from ' || table_raster || ';';
           execute requete into epsg_emprise ;
-- Normalement il devrait y avoir une analyse pour savoir quelle est la maille la plus fine entre celle de l'emprise et celle de la source météo. Non implémenté au 22/07
return 'Le mode maille (complete ou partielle) n''est pas implémenté actuellement dans ce traitement';

 else
         return
'Erreur : le paramètre mode_emprise doit prendre une des 3 valeurs XY, MAILLE_COMPLETE ou MAILLE_PARTIELLE';
 END CASE;

--  RAISE NOTICE 'Creation du compte - % ',req;
 return 'ok' ;

EXCEPTION
WHEN
OTHERS THEN
raise notice
'% % - %', sqlstate, sqlerrm,requete;
return 'erreur ' || requete || ' - ' || sqlerrm;
END;
$span$;

COMMENT ON FUNCTION public.ps_extraction_meteo(mode_emprise text, table_tmp text, source_meteo text, table_result text, system_geo_emprise text, nom_geometrie_emprise text)
IS 'Fonction d''extraction des informations météo (id_maille) pour la création de fichier météo en entrée du modèle biljou';

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