Changes between Version 42 and Version 43 of CCM2 download and load


Ignore:
Timestamp:
Apr 3, 2010 3:39:30 PM (15 years ago)
Author:
cedric
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CCM2 download and load

    v42 v43  
    201201 
    202202=== Plsql function which returns the id of the primary catchments within the catchment corresponding to the strahler order === 
     203{{{ 
     204-- it is necessary to create a type to hold the output type 
     205DROP TYPE IF EXISTS wso1_id; 
     206CREATE TYPE wso1_id as (wso1_id int); 
     207-- In the function I tried to create a wso type to simplify the text. Pb you need to specify  
     208-- a tablename.columname%TYPE which will have to change along with the column, hence the big ugly script below... 
     209DROP  FUNCTION IF EXISTS ccm21.pricatch_from_catch(gid_ numeric); 
     210CREATE OR REPLACE FUNCTION ccm21.pricatch_from_catch(gid_ numeric) RETURNS setof int AS $$ 
     211        DECLARE 
     212        result RECORD; 
     213        pri wso1_id%rowtype; 
     214        resultcount RECORD; 
     215        BEGIN 
     216            SELECT INTO result strahler FROM ccm21.riversegments where gid=gid_; 
     217            RAISE NOTICE 'result is %' ,result; 
     218            IF result.strahler=2 THEN    
     219                RAISE NOTICE 'WSO_2 used'; 
     220                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso2_id = 
     221                        (select wso2_id from ccm21.riversegments r  
     222                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     223                        where r.gid=gid_); 
     224                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     225                for pri in select wso1_id from ccm21.catchments c  where wso2_id = 
     226                        (select wso2_id from ccm21.riversegments r  
     227                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     228                        where r.gid=gid_) loop 
     229                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     230                return next pri.wso1_id; 
     231                end loop; 
     232                return;  
     233            ELSIF result.strahler=3 THEN  
     234                RAISE NOTICE 'WSO_3 used'; 
     235                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso3_id = 
     236                        (select wso3_id from ccm21.riversegments r  
     237                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     238                        where r.gid=gid_); 
     239                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     240                for pri in select wso1_id from ccm21.catchments c  where wso3_id = 
     241                        (select wso3_id from ccm21.riversegments r  
     242                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     243                        where r.gid=gid_) loop 
     244                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     245                return next pri.wso1_id; 
     246                end loop; 
     247                return;  
     248            ELSIF result.strahler=4 THEN 
     249                RAISE NOTICE 'WSO_4 used'; 
     250                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso4_id = 
     251                        (select wso4_id from ccm21.riversegments r  
     252                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     253                        where r.gid=gid_); 
     254                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     255                for pri in select wso1_id from ccm21.catchments c  where wso4_id = 
     256                        (select wso4_id from ccm21.riversegments r  
     257                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     258                        where r.gid=gid_) loop 
     259                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     260                return next pri.wso1_id; 
     261                end loop; 
     262                return;                  
     263            ELSIF result.strahler=5 THEN 
     264                RAISE NOTICE 'WSO_5 used'; 
     265                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso5_id = 
     266                        (select wso5_id from ccm21.riversegments r  
     267                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     268                        where r.gid=gid_); 
     269                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     270                for pri in select wso1_id from ccm21.catchments c  where wso5_id = 
     271                        (select wso5_id from ccm21.riversegments r  
     272                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     273                        where r.gid=gid_) loop 
     274                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     275                return next pri.wso1_id; 
     276                end loop; 
     277                return;  
     278            ELSIF result.strahler=6 THEN 
     279                RAISE NOTICE 'WSO_6 used'; 
     280                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso6_id = 
     281                        (select wso6_id from ccm21.riversegments r  
     282                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     283                        where r.gid=gid_); 
     284                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     285                for pri in select wso1_id from ccm21.catchments c  where wso6_id = 
     286                        (select wso6_id from ccm21.riversegments r  
     287                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     288                        where r.gid=gid_) loop 
     289                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     290                return next pri.wso1_id; 
     291                end loop; 
     292                return;          
     293            ELSIF result.strahler=7 THEN 
     294                RAISE NOTICE 'WSO_7 used'; 
     295                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso7_id = 
     296                        (select wso7_id from ccm21.riversegments r  
     297                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     298                        where r.gid=gid_); 
     299                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     300                for pri in select wso1_id from ccm21.catchments c  where wso7_id = 
     301                        (select wso7_id from ccm21.riversegments r  
     302                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     303                        where r.gid=gid_) loop 
     304                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     305                return next pri.wso1_id; 
     306                end loop; 
     307                return;  
     308            ELSIF result.strahler=8 THEN 
     309                RAISE NOTICE 'WSO_8 used'; 
     310                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso8_id = 
     311                        (select wso8_id from ccm21.riversegments r  
     312                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     313                        where r.gid=gid_); 
     314                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     315                for pri in select wso1_id from ccm21.catchments c  where wso8_id = 
     316                        (select wso8_id from ccm21.riversegments r  
     317                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     318                        where r.gid=gid_) loop 
     319                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     320                return next pri.wso1_id; 
     321                end loop; 
     322                return;                  
     323            ELSIF result.strahler=9 THEN 
     324                RAISE NOTICE 'WSO_9 used'; 
     325                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso9_id = 
     326                        (select wso9_id from ccm21.riversegments r  
     327                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     328                        where r.gid=gid_); 
     329                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     330                for pri in select wso1_id from ccm21.catchments c  where wso9_id = 
     331                        (select wso9_id from ccm21.riversegments r  
     332                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     333                        where r.gid=gid_) loop 
     334                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     335                return next pri.wso1_id; 
     336                end loop; 
     337                return;                  
     338            ELSIF result.strahler=10 THEN 
     339                RAISE NOTICE 'WSO_10 used'; 
     340                SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso10_id = 
     341                        (select wso10_id from ccm21.riversegments r  
     342                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     343                        where r.gid=gid_); 
     344                RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     345                for pri in select wso1_id from ccm21.catchments c  where wso10_id = 
     346                        (select wso10_id from ccm21.riversegments r  
     347                        join ccm21.catchments c on r.wso1_id=c.wso1_id  
     348                        where r.gid=gid_) loop 
     349                pri.wso1_id=CAST(pri.wso1_id AS int8); 
     350                return next pri.wso1_id; 
     351                end loop; 
     352                return;                                                                  
     353            ELSE RAISE NOTICE 'Strahler is larger than this function can handle !'; 
     354            END IF; 
     355            RETURN; 
     356        END; 
     357        $$ 
     358LANGUAGE 'plpgsql' ; 
     359COMMENT ON FUNCTION ccm21.pricatch_from_catch (gid_ numeric) IS 'Uses the gid from ccm21.riversegments, checks strahler, and select the catchment accordingly, then returns all primary catchments from this larger catchment'; 
     360}}} 
     361{{{ 
     362--examples for use 
     363 
     364SELECT  ccm21.pricatch_from_catch(234706); --la vilaine dans son ensemble 
     365-- NOTICE:  result is (6) 
     366-- NOTICE:  WSO_6 used 
     367-- NOTICE:  number of primary catchments in the catchment =(759) 
     368-- durée=2s 
     369-- 
     370SELECT * from ccm21.catchments where wso1_id in (SELECT  ccm21.pricatch_from_catch(234706)); 
     371}}} 
     372