wiki:RHT PATE

back to first page..
back to RHT
back to PATE Anguille

calcul des mortalités à la dévalaison

Sauvegarde et restauration des données de modèle dans la base

voir Model Results pour le script de sauvegarde à partir du fichier d'échange (en bas)

creation de méthodes R et d'une page "main" de lancement

  • source:trunk/EDARHT/main_rht_result.R fonction de lancement
  • source:trunk/EDARHT/BaseEdaRHTmodel.R modification ajout d'une méthode loaddb(mod_id) pour charger depuis la base
  • livraison du package stacomirtools et modification du init.R (chez Céline OK)
  • modification de la méthode predict pour intégrer les changements de la méthode fn_pred_set, OK les chargements depuis la base et les prédictions donnent le même résultat
  • source:trunk/EDARHT/BaseEdaRHTriversegmentspate.r
    • pour cette classe il y aura des affichages graphiques, creation d'un shape pour affichage dans R, j'utilise le chemin donné par shpwd du xml....
      E:\workspace\EDAdata\dataEDAccm\shape>pgsql2shp -f "rhtvs2" -h localhost -p 5432
       -u postgres -P postgres -g the_geom -r -k eda2.0_RHT "select id_drain, the_geom
       from rht.rhtvs2"
      
    • bon ben quand on passe par un lien ODBC, il y a des antislashes qui virent. Donc passer par R ne règle pas le problème. Donc il faut que je réussisse en sql. Ci dessous c'est fait.

fonction sql de recherche du bv amont

-- D'abord un essai qui marche
select cast(unnest(vecteurchemin) as integer) as id_drain 
        from (SELECT regexp_split_to_array(ltree2text(chemin),E'\\.+') as vecteurchemin from rht.rhtvs2 where chemin ~ '*.20211.*') as sub 
EXCEPT  select cast(unnest(vecteurchemin) as integer) as id_drain 
        from ( select regexp_split_to_array(ltree2text(chemin),E'\\.+') as vecteurchemin from rht.rhtvs2 where id_drain=20211) as sub
EXCEPT select 20211;

-- Ensuite la fonction qui ne marchait pas le E'\\.+' devient un E''\\\\.+''
DROP TYPE IF EXISTS id_drain;
CREATE TYPE id_drain as (id_drain int);
-- je sors le create table de la fonction pour gagner du temps... Attention à bien le lancer sinon ça plantera
DROP TABLE IF EXISTS rht.upstream_riversegments;
CREATE TABLE rht.upstream_riversegments(id_drain integer);
DROP  FUNCTION IF EXISTS rht.upstream_segments(id_ numeric);
CREATE OR REPLACE FUNCTION rht.upstream_segments(id_ numeric) RETURNS setof int AS $$
        DECLARE
        id_drain id_drain%ROWTYPE;
        BEGIN
        -- filling a new table with the results from a catchment
        delete from rht.upstream_riversegments;
        EXECUTE 'insert into rht.upstream_riversegments (select cast(unnest(vecteurchemin) as integer) as id_drain 
        from (SELECT regexp_split_to_array(ltree2text(chemin),E''\\\\.+'') as vecteurchemin from rht.rhtvs2 where chemin ~ ''*.'||id_||'.*'') as sub 
        EXCEPT  select cast(unnest(vecteurchemin) as integer) as id_drain 
        from ( select regexp_split_to_array(ltree2text(chemin),E''\\\\.+'') as vecteurchemin from rht.rhtvs2 where id_drain='||id_||') as sub
        EXCEPT select '||id_||' order by id_drain)';
        
        for id_drain in select * from rht.upstream_riversegments loop
                id_drain.id_drain=CAST(id_drain.id_drain AS int8);
                return next id_drain.id_drain;
                end loop;
                return; 
        END;
$$
LANGUAGE 'plpgsql' ;
COMMENT ON FUNCTION rht.upstream_segments(id_drain_ numeric) IS 'function using btree to calculate upstream riversegments';
-- pour lancer la fonction
select  rht.upstream_segments(20211); --734ms
  • TODO
    • Encapsuler la récupération des segments amont dans une méthode de classe
    • encapsuler le chargement du fichier des barrages dans une méthode de classe
    • vérifier les segments amont par le développement d'une méthode d'affichage graphique sous R
    • dans le main, passer les résultats RHT au niveau du data de la classe pate...
    • parcourir les segments amont et stocker les mortalités dans un array nrow(rht) 3 (types de mortalite) 353 (ouvrages dans la base)
    • Calculer la population amont au niveau d'un ouvrage en appelant les effectifs au lieu de la densité

Récupération du tronçon mer

Cette fonction est développée pour afficher le barrage dans le contexte de son bassin versant

-- récupération de l'ancètre : rappel il n'y a pas d'index GiST possible, ça fait planter le serveur. On utilise le premier élément de l'array qui est retourné.
select vecteurchemin[1] from (
        select regexp_split_to_array(ltree2text(chemin),E'\\.+') vecteurchemin from rht.rhtvs2 where id_drain=20211) sub

DROP  FUNCTION IF EXISTS rht.sea_riversegment(id_ numeric);
CREATE OR REPLACE FUNCTION rht.sea_riversegment(id_ numeric) RETURNS int AS $$
        DECLARE id_drain int;
        BEGIN
        execute 'select vecteurchemin[1] from (
        select regexp_split_to_array(ltree2text(chemin),E''\\\\.+'') vecteurchemin from rht.rhtvs2 where id_drain='||id_||') sub' into id_drain;
        RETURN id_drain;
        END;
$$
LANGUAGE 'plpgsql' ;
COMMENT ON FUNCTION rht.sea_riversegment(id_drain_ numeric) IS 'function using btree to calculate sea riversegments';
select rht.sea_riversegment(20211);    

fonction sql qui donne l'id_drain_mer sur le rht

select * from rht.rhtvs2 where noeudmer=TRUE --1082
alter table rht.rhtvs2 add column id_drainmer integer;

DROP TYPE IF EXISTS iddrainmer;
CREATE TYPE iddrainmer as (iddrainmer int);

-- essai update rht.rhtvs2 set id_drainmer=118671 where id_drain in (select rht.upstream_segments(118671));

CREATE OR REPLACE FUNCTION rht.setdownstreamsegment()
  RETURNS integer AS
$BODY$
        DECLARE
        numberiddrain integer;
        iddrainmer iddrainmer%ROWTYPE;
        BEGIN
        numberiddrain=0;        

        for iddrainmer in select id_drain as idddrainmer from rht.rhtvs2 where noeudmer=TRUE loop
                 RAISE NOTICE 'passe par la %...',iddrainmer.iddrainmer;
                 numberiddrain=numberiddrain+1;
                 iddrainmer.iddrainmer=cast(iddrainmer.iddrainmer as numeric);
                update rht.rhtvs2 set id_drainmer=iddrainmer.iddrainmer where id_drain in (select rht.upstream_segments(iddrainmer.iddrainmer));
                end loop;
                return numberiddrain;   
        END;
$BODY$
  LANGUAGE plpgsql ;


select rht.setdownstreamsegment();  ---2394535 ms
select * from rht.rhtvs2 where id_drainmer is not null;

alter table rht.pate add column mortalite numeric;
select addgeometrycolumn('rht','pate','the_geom',3035,'POINT',2);
select * from rht.pate;
update rht.pate set the_geom=roe_v2.the_geom
from roe_v2.roe_v2
where roe_v2.id_roe=pate.id_roe;--393
pgsql2shp -f "E:/workspace/EDAdata/dataEDAccm/shape/pate" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_roe, the_geom,id_drain,bv from rht.pate;
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Gav" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(118612));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/May" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(213048));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Arc" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(21942));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Vir" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(303630));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Bla" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(209549));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Cha" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(100517));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Vil" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(212340));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Dro" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(105792));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Bre" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(300002));"
#C:\"Program Files"\PostgreSQL\8.4\bin\pgsql2shp -f "D:/CelineJouanin/workspace/EDAData/dataEDAccm/shape/Ado" -h localhost -p 5432 -u postgres -g the_geom -r -k eda2.0_RHT "select id_drain,the_geom from rht.rhtvs2 where id_drain in (select rht.upstream_segments(118514));"
Last modified 13 years ago Last modified on Apr 6, 2012 5:11:00 PM