back to first page[..][[BR]] back to ["RHT"][[BR]] back to ["PATE Anguille"][[BR]] = 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 == {{{ #!sql -- 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 {{{ #!sql -- 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 == {{{ #!sql 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); 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 from rht.rhtvs2 where noeudmer=TRUE loop numberiddrain=numberiddrain+1; update rht.rhtvs2 set id_drainmer=iddrainmer.iddrainmer where id_drain in (select rht.troncons_amont(iddrainmer.iddrainmer)); end loop; return numberiddrain; END; $BODY$ LANGUAGE plpgsql ; select rht.setdownstreamsegment(); }}} {{{ #!sql 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; }}} {{{ #!sql #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));" }}}