Ignore:
Timestamp:
04/26/10 19:12:49 (14 years ago)
Author:
cbipsl
Message:

maj eccad V3.2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • ether_eccad/trunk/API_EXTRACT/src/eccad.c

    r68 r70  
    11#include "eccad.h" 
    2  
    32 
    43EccadDB connectEccadDB(const char* server, const char* dbName, 
     
    109    if (PQstatus(conn) == CONNECTION_BAD) 
    1110    { 
    12       fprintf(stderr, "Connection to database '%s' failed.\n", dbName); 
    13       fprintf(stderr, "%s", PQerrorMessage(conn)); 
     11//      fprintf(stderr, "Connection to database '%s' failed.\n", dbName); 
     12//      fprintf(stderr, "%s", PQerrorMessage(conn)); 
    1413      PQfinish(conn); 
    1514    } 
     
    2423} 
    2524 
    26 gdImagePtr grid2img(EccadDB db, ptrGrid g, ptrParam p, int idMap) 
     25gdImagePtr grid2img(EccadDB db, ptrGrid g, ptrParam p, int idMap, int idClassdis) 
    2726{ 
    2827  gdImagePtr im=NULL; 
    2928  register int i,j; 
    3029  LIST map; 
    31   /*if( idMap == 48)  
    32      // colormap dynamique les valeurs devrait etre codés en [O-1] 
    33     map= mapOfParamById(db, idMap, (double)0., (double)1.);   
    34 //     map= mapOfParamById(db, idMap, (double)0., (double)683.92);   
    35   else */ 
    36      map= mapOfParamById(db, idMap, p->mini, p->maxi); 
    37  fprintf(stderr,"start colorAllocate with %d colors\n", map->count); 
     30 
     31  map= mapOfParamById(db, idMap, idClassdis, p->mini, p->maxi); 
     32//  fprintf(stderr,"start colorAllocate with %d colors\n", map->count); 
     33 
    3834  if(map) 
    3935  { 
    40     if (im= gdImageCreate(g->width, g->height)) 
    41     { 
    42         fprintf(stderr," width %d height %d\n",g->width, g->height );    
    43       colorAllocate(im, map); 
    44          fprintf(stderr,"im->sy=%d\n",im->sy); 
    45          fprintf(stderr,"im->sx=%d\n",im->sx); 
    46  
    47       for (j=0 ;  j < im->sy; j++) 
    48         for (i=0  ; i < im->sx ; i++) 
    49         { 
    50           int value= val2Color(g->datas[j * im->sx +i],  map); 
    51           gdImageSetPixel(im, i, j, value); 
    52         } 
    53     } 
     36        if (im= gdImageCreate(g->width, g->height)) 
     37        { 
     38//              fprintf(stderr," width %d height %d\n",g->width, g->height ); 
     39                colorAllocate(im, map); 
     40//              fprintf(stderr,"im->sy=%d\n",im->sy); 
     41//              fprintf(stderr,"im->sx=%d\n",im->sx); 
     42//              for (j=0 ;  j < im->sy; j++) 
     43//                      for (i=0  ; i < im->sx ; i++) 
     44        for (j=0 ;  j < gdImageSY(im); j++) 
     45            for (i=0  ; i < gdImageSX(im) ; i++) 
     46                        { 
     47//                              int value= val2Color(g->datas[j * im->sx +i],  map); 
     48                                int value= val2Color(g->datas[j * g->width +i],  map); 
     49//if (i>=363 && i<=365 && j>=81 && j<=83)       fprintf(stderr,"i=%d, j=%d, color Paris=%d, val=%ld\n",i,j,value,g->datas[j * g->width +i]); 
     50                                gdImageSetPixel(im, i, j, value); 
     51                        } 
     52                } 
    5453  } 
    55   fprintf(stderr," ok\n" ); 
    5654  return im; 
    5755} 
    5856 
    59 // insertion d'une colormap dans une image gd 
     57// insertion d'une classmap dans une image gd 
    6058// aucune couleur ne doit etre alloue dans l'image d'origine 
    6159void colorAllocate(gdImagePtr im, LIST map) 
     
    7270 
    7371char * oid2filename(EccadDB db, int oidGrille, int width, int height, 
    74                     char * idParam, int idMap, char *resultFile) 
     72                    char * idParam, int idMap, int idClassdis, char *resultFile) 
    7573{ 
    7674   char *fileName=NULL; 
     
    102100           LIST map; 
    103101 
    104            if(  map = mapOfParamById(db, idMap, mini, maxi)) 
     102           if(  map = mapOfParamById(db, idMap, idClassdis, mini, maxi)) 
    105103           { 
    106104             gdImagePtr im; 
     
    109107               register int i,j; 
    110108               FILE *out; 
    111 fprintf(stderr," oidGrille %d mini %f maxi %f\n", oidGrille, mini,maxi); 
     109//fprintf(stderr," oidGrille %d mini %f maxi %f\n", oidGrille, mini,maxi); 
    112110               colorAllocate(im, map); 
    113111               for (j=0 ;  j < im->sy; j++) 
     
    137135       } 
    138136       else fprintf(stderr," Erreur Read OID : %ld sur %d octets\n", K, size); 
    139 fprintf (stderr, " now free grid\n"); 
     137//fprintf (stderr, " now free grid\n"); 
    140138       freeGrid(g); 
    141139     } 
     
    147145} 
    148146 
    149 char * getRaster(const char *dbHost, const char * dbName, const char *dbUser, int idGrille, int idMap) 
     147char * getRaster(const char *dbHost, const char * dbName, const char *dbUser, int idGrille, int idMap, int idClassdis) 
    150148{ 
    151149    char *resultFile; 
     
    153151    char query[256]; 
    154152 
     153    //sprintf(query,"/tmp/%d.%d.%d.png", idGrille, idMap, idClassdis); 
    155154    sprintf(query,"/tmp/%d.%d.png", idGrille, idMap); 
    156155    resultFile= strdup(query); 
     
    162161 
    163162      if((db= PQsetdbLogin(dbHost,"5432", NULL, NULL, dbName, dbUser, NULL)) && 
    164          (PQstatus(db) != CONNECTION_BAD) ) 
    165  
     163                (PQstatus(db) != CONNECTION_BAD) ) 
    166164      { 
    167165        PGresult *res; 
    168         sprintf(query, 
    169           "SELECT valeurs_grille, id_param, ncol_grille, nlign_grille FROM grille WHERE id_grille = %d;", 
    170           idGrille); 
     166        sprintf(query, "SELECT valeurs_grille, id_param, ncol_grille, nlign_grille FROM grille WHERE id_grille = %d;",idGrille); 
    171167        res=PQexec(db,query); 
    172168        if(checkSQLErrors(res) && PQntuples(res)) 
     
    175171          int width=  atoi(PQgetvalue(res, 0, 2)); 
    176172          int height= atoi(PQgetvalue(res, 0, 3)); 
    177           fileName= oid2filename( db, oid, width, height, 
    178                                 PQgetvalue(res, 0, 1), idMap, resultFile); 
     173          fileName= oid2filename(db, oid, width, height, PQgetvalue(res, 0, 1), idMap, idClassdis, resultFile); 
    179174        } 
    180175        else  fprintf(stderr, "No found id-grille %d\n", idGrille);   
     
    182177        PQfinish(db); 
    183178      } 
    184       else  fprintf(stderr, "Erreur connect to db %s on host %s\n",  
    185                                        dbName, dbHost); 
     179      else  fprintf(stderr, "Erreur connect to db %s on host %s\n", dbName, dbHost); 
    186180      resultFile= fileName; 
    187181   } 
     
    197191  if (conn==NULL || PQstatus(conn) == CONNECTION_BAD) 
    198192  { 
    199      return (int)NULL; 
     193     return 0==1; 
    200194  } 
    201195  else{ 
     
    280274      for(i=0; i< PQntuples(res); i++) 
    281275      { 
    282         double test = 0.00000001; 
    283          
    284          fprintf(stderr, " PQgetvalue*--> maxPar %s   %s", PQgetvalue(res, i, 6), PQgetvalue(res, i, 3)); 
     276//               fprintf(stderr, " PQgetvalue*--> maxPar %s   %s", PQgetvalue(res, i, 6), PQgetvalue(res, i, 3)); 
    285277         //fprintf(stderr, " PQgetvalue-> maxPar %f", (double)strtod(PQgetvalue(res, i, 6),NULL)); 
    286278         
    287279         ptrParam p= allocParam(  
    288280             atoi(PQgetvalue(res, i, 0)),    //id 
    289              atoi(PQgetvalue(res, i, 2)),    //id unit 
     281             atoi(PQgetvalue(res, i, 2)),    //id unite 
    290282             PQgetvalue(res, i, 3),         // full name 
    291              atof(PQgetvalue(res, i, 6)),    // minPpar 
    292              atof(PQgetvalue(res, i, 7)));   // maxPar 
     283             atof(PQgetvalue(res, i, 6)),    // minPar 
     284             atof(PQgetvalue(res, i, 7)),NULL);   // maxPar 
    293285        add_to_tail(params, p); 
    294286      } 
     
    299291} 
    300292 
     293ptrParam getParamFromId(EccadDB db, int idParam) 
     294{ 
     295        PGresult *res; 
     296        char query[256]; 
     297        sprintf(query, "SELECT id_param, id_unite, fullname_param, min_param, max_param, shortname_unite FROM parametre inner join unite using (id_unite) WHERE id_param = %d;", idParam); 
     298        res=PQexec(db,query); 
     299        ptrParam p = NULL; 
     300 
     301        if(checkSQLErrors(res) && PQntuples(res) ) 
     302        { 
     303                p= allocParam( 
     304            atoi(PQgetvalue(res, 0, 0)),    //id 
     305            atoi(PQgetvalue(res, 0, 1)),    //id unite 
     306            PQgetvalue(res, 0, 2),          // full name 
     307            atof(PQgetvalue(res, 0, 3)),    // minParam 
     308            atof(PQgetvalue(res, 0, 4)),    // maxParam 
     309            PQgetvalue(res, 0, 5));         // shortname unite 
     310        } 
     311        PQclear(res); 
     312        return p; 
     313} 
     314 
     315ptrParam getParamFromName(EccadDB db, char* nomParam) 
     316{ 
     317        PGresult *res; 
     318        char query[256]; 
     319        sprintf(query, "SELECT id_param, id_unite, fullname_param, min_param, max_param, shortname_unite FROM parametre inner join unite using (id_unite) WHERE fullname_param = '%s';", nomParam); 
     320        res=PQexec(db,query); 
     321        ptrParam p = NULL; 
     322 
     323        if(checkSQLErrors(res) && PQntuples(res) ) 
     324        { 
     325                p= allocParam( 
     326            atoi(PQgetvalue(res, 0, 0)),    //id 
     327            atoi(PQgetvalue(res, 0, 1)),    //id unite 
     328            PQgetvalue(res, 0, 2),          // full name 
     329            atof(PQgetvalue(res, 0, 3)),    // minPar 
     330            atof(PQgetvalue(res, 0, 4)),    // maxPar 
     331                PQgetvalue(res, 0, 5));                 // shortname unite 
     332        } 
     333        PQclear(res); 
     334        return p; 
     335} 
     336 
    301337// generation de la table de couleur d'une map de la base 
    302338//        idMap : id de la base 
    303339//        mini/maxi : valeurs min max du parametre de la base  
    304 //            ces deux valeurs sont néssaire car les intervalles de couleurs 
     340//            ces deux valeurs sont nécessaire car les intervalles de couleurs 
    305341//              sont codes en unsigned maxhort / au extremes du param  
    306342 
    307 LIST mapOfParamById(EccadDB conn, int idMap, double mini, double  maxi) 
     343LIST mapOfParamById(EccadDB conn, int idMap, int idClassdis, double mini, double  maxi) 
    308344{ 
    309345   LIST map=NULL; 
     
    313349    
    314350   int isDynamic = 0; 
     351    
     352   /*****************/ 
     353   //mini=-1; 
     354   //maxi=100; 
     355   //int pas=10; 
     356   /****************/ 
    315357 
    316358// mapping des couleurs de la base 
    317359   if(!colors) colors=initColors(conn); 
    318360 
    319 fprintf(stderr,  "Generation interval for idMap %d With  min %f max %f\n",  
    320     idMap,  mini,  maxi); 
    321      
    322  
    323 //verification de la colormap dynamique 
     361//fprintf(stderr,  "Generation interval for idMap %d With  min %f max %f\n", 
     362//    idMap,  mini,  maxi); 
     363 
     364//verification de la classmap dynamique 
    324365sprintf(query,  
    325        "SELECT * FROM colormap WHERE cm_id=%d;", idMap); 
    326 res=PQexec(conn,query);     
     366       "SELECT scl_name FROM scale_value WHERE scl_id=%d;", idClassdis); 
     367res=PQexec(conn,query); 
    327368 if(checkSQLErrors(res) && PQntuples(res))  
    328369   { 
    329            isDynamic = (!strcmp(PQgetvalue(res, 0, 1),"linear") || !strcmp(PQgetvalue(res, 0, 1),"logarithm") || !strcmp(PQgetvalue(res, 0, 1),"exponential"));  
    330                          
    331    } 
    332 // recherche des interval de la colormap     
    333    sprintf(query,  
    334        "SELECT * FROM color_index WHERE cm_id=%d order by ci_min;", idMap); 
     370           isDynamic = (!strcmp(PQgetvalue(res, 0, 0),"linear") || !strcmp(PQgetvalue(res, 0, 0),"logarithm") || !strcmp(PQgetvalue(res, 0, 0),"exponential")); 
     371   } 
     372 
     373// recherche des interval de la classmap 
     374   sprintf(query,"SELECT * FROM class_distribution as c JOIN class_index USING (num_order) WHERE scl_id=%d and clm_id=%d order by c.num_order;",idClassdis, idMap); 
    335375   res=PQexec(conn,query); 
    336    if(checkSQLErrors(res) && PQntuples(res))  
     376   if(checkSQLErrors(res) && PQntuples(res)) 
    337377   { 
    338378// mise en place des intervalles base dans la liste map 
     
    340380      register int i; 
    341381      map = make_list(); 
    342       fprintf(stderr,  "--------*******--------min %ld max %ld\n",  
    343          v2int(mini,mini,maxi), v2int(maxi,mini,maxi)); 
    344        unsigned int cmin,cmax; 
     382//      fprintf(stderr,  "--------*******--------min %ld max %ld\n", 
     383//      v2int(mini,mini,maxi), v2int(maxi,mini,maxi)); 
     384      unsigned int cmin,cmax; 
     385      double borneMin, borneMax; 
    345386      for(i=0; i< PQntuples(res); i++) 
    346387      { 
    347          
    348 //      conversion en unsigned int des intervalles 
    349         /* int id= atoi(PQgetvalue(res, i, 1));   //idColor 
    350          if ((idMap == 2) || (idMap == 48))  cmin= v2int(atof(PQgetvalue(res, i, 3))* maxi,mini, maxi); 
    351          else  cmin= v2int(atof(PQgetvalue(res, i, 3)),mini, maxi); 
    352          if ((idMap == 2) || (idMap == 48))  cmax= v2int(atof(PQgetvalue(res, i, 2))* maxi,mini, maxi); 
    353          else cmax= v2int(atof(PQgetvalue(res, i, 2)),mini, maxi);*/ 
    354           
    355          int id= atoi(PQgetvalue(res, i, 1));   //idColor 
    356          if (isDynamic)  cmin= v2int(atof(PQgetvalue(res, i, 3))* maxi,mini, maxi); 
    357          else  cmin= v2int(atof(PQgetvalue(res, i, 3)),mini, maxi); 
    358          if (isDynamic)  cmax= v2int(atof(PQgetvalue(res, i, 2))* maxi,mini, maxi); 
    359          else cmax= v2int(atof(PQgetvalue(res, i, 2)),mini, maxi); 
    360           
    361           
    362 //     affectation des couleurs aux intervalles 
    363          ptrRGB c; 
    364          if( c= (ptrRGB)search_list(colors, &id, (PFI)inColorId) ) 
    365          { 
    366            interv = alloueInterval( c,cmin, cmax); 
    367 fprintf(stderr,  "add interval: cmin %s  %ld cmax %s  %ld id -> col %d\n",  
    368           PQgetvalue(res, i, 3), cmin, PQgetvalue(res, i, 2), cmax, c->id);  
    369  /*          
    370          fprintf(stderr,  "add interval: min %f max %f  id -> col %d\n",  
    371          int2v(cmin,mini,maxi), int2v(cmax,mini,maxi), c->id);  
    372 */ 
    373            add_to_tail( map , interv); 
     388 
     389        //conversion en unsigned int des intervalles 
     390  
     391        int id=atoi(PQgetvalue(res, i, 5));//idColor 
     392        borneMin = atof(PQgetvalue(res, i, 3)); 
     393        borneMax = atof(PQgetvalue(res, i, 4)); 
     394        if (borneMin < 0) borneMin = 0; 
     395        if (isDynamic)  cmin= v2int(borneMin*maxi,mini, maxi); 
     396        else  cmin= v2int(borneMin,mini, maxi); 
     397        if (isDynamic)  cmax= v2int(borneMax*maxi,mini, maxi); 
     398        else cmax= v2int(borneMax,mini, maxi); 
     399//fprintf(stderr,  "--------*i=%d, min=%f, max=%f, f1=%.1f, f2=%.1f, cmin=%ld, cmax=%ld\n",i,mini,maxi,borneMin,borneMax,cmin,cmax); 
     400        /* 
     401        int id= atoi(PQgetvalue(res, i, 1));   //idColor 
     402        if (isDynamic)  cmin= v2int(atof(PQgetvalue(res, i, 3))* maxi,mini, maxi); 
     403        else  cmin= v2int(atof(PQgetvalue(res, i, 3)),mini, maxi); 
     404        if (isDynamic)  cmax= v2int(atof(PQgetvalue(res, i, 2))* maxi,mini, maxi); 
     405        else cmax= v2int(atof(PQgetvalue(res, i, 2)),mini, maxi); 
     406        */ 
     407 
     408 
     409        //affectation des couleurs aux intervalles 
     410        ptrRGB c; 
     411        if( c= (ptrRGB)search_list(colors, &id, (PFI)inColorId) ) 
     412        { 
     413                        interv = alloueInterval( c,cmin, cmax); 
     414//                      fprintf(stderr,  "add interval: cmin %s  %ld cmax %s  %ld id -> col %d \n", 
     415//                      PQgetvalue(res, i, 3), cmin, PQgetvalue(res, i, 4), cmax, c->id); 
     416 
     417                        add_to_tail( map , interv); 
    374418         } 
    375419         else 
     
    380424      } 
    381425   } 
    382    else   fprintf(stderr,  "No found color for idMap  %d\n", idMap); 
     426   else fprintf(stderr,  "No found color for idMap  %d\n", idMap); 
    383427 
    384428   PQclear(res); 
     
    387431} 
    388432 
    389 //generation d'une table de couleur en fobction d'un parametre // 
    390 LIST mapOfParam(EccadDB conn, ptrParam p) 
     433//generation d'une table de couleur en fonction d'un parametre // 
     434/*LIST mapOfParam(EccadDB conn, ptrParam p) 
    391435{ 
    392436   LIST map=NULL; 
     
    395439    
    396440   sprintf(query,"%s \'%s\';",  
    397       "SELECT cm_id FROM param_color NATURAL JOIN parametre WHERE fullName_param = ",p->name); 
     441                "SELECT cm_id, scl_default_id FROM param_color NATURAL JOIN parametre WHERE fullName_param = ",p->name); 
    398442   res=PQexec(conn,query); 
    399443   if(checkSQLErrors(res))  
    400       map=  mapOfParamById(conn, atoi(PQgetvalue(res, 0, 0)), p->mini, p->maxi); 
     444      map=  mapOfParamById(conn, atoi(PQgetvalue(res, 0, 0)), atoi(PQgetvalue(res, 0, 1)), p->mini, p->maxi); 
    401445   PQclear(res); 
    402446   return map; 
    403 } 
     447}*/ 
    404448 
    405449// w, h : size of origin grid isur zone globale implicite 
     
    418462     if( (id = lo_open(db, oidGrille, INV_READ)) != -1) 
    419463     { 
    420        double eps=0.000001; 
    421  
    422464       if ((z != NULL) && memcmp(z, &globalZone, sizeof(Zone)) ) 
    423465       { 
    424466         int iDeb ,iFin, jDeb, jFin; 
    425467         double  paslon, paslat; 
    426          float x, y, lat, lon; 
     468         float x, y, latMin, lonMin, latMax, lonMax; 
    427469         unsigned long K; 
    428470// le pas dorigine        
     
    430472         paslon= pasLon(&globalZone, &g); 
    431473          // la zone qui doit etre extraite 
    432 //         fprintf(stderr, 
    433 //         "Extrait Origin Lat %f %f  pasLat %.2f lon %f %f pasLon %.2f\n",  
    434 //z->latMin,z->latMax,paslat,z->lonMin,z->lonMax,paslon); 
    435 // la zone à  extraire 
    436          if( z->lonMax != z->lonMin) 
    437              z->lonMax=z->lonMax -eps; 
    438          if( z->latMax != z->latMin) 
    439            z->latMax=z->latMax +eps; 
    440          jDeb= lat2j(z->latMin, &g, &globalZone); 
    441          jFin= lat2j(z->latMax, &g, &globalZone); 
    442          iDeb= lon2i(z->lonMin, &g, &globalZone); 
    443          iFin= lon2i(z->lonMax, &g, &globalZone); 
     474//         fprintf(stderr, "Extrait Origin Lat %f->%f  pasLat %.2f lon %f->%f pasLon %.2f\n", 
     475//                       z->latMin,z->latMax,paslat,z->lonMin,z->lonMax,paslon); 
     476// la zone à extraire 
     477//               z->lonMax = z->lonMax - paslon/2.; 
     478//               z->lonMin = z->lonMin + paslon/2.; 
     479//               z->latMax = z->latMax - paslat/2.; 
     480//               z->latMin = z->latMin + paslat/2.; 
     481                 if (z->latMin == z->latMax && z->lonMin == z->lonMax) { 
     482                         if (z->latMin == 0 && z->lonMin == 0) { 
     483                                 lonMax = paslon/2.; 
     484                                 lonMin = paslon/2.; 
     485                                 latMax = paslon/2.; 
     486                                 latMin = paslon/2.; 
     487                         } else { 
     488                                 lonMax = z->lonMax; 
     489                                 lonMin = z->lonMin; 
     490                                 latMax = z->latMax; 
     491                                 latMin = z->latMin; 
     492                         } 
     493                 } else { 
     494                         lonMax = z->lonMax - paslon/2.; 
     495                         lonMin = z->lonMin + paslon/2.; 
     496                         latMax = z->latMax - paslat/2.; 
     497                         latMin = z->latMin + paslat/2.; 
     498                 } 
     499                 jDeb= lat2j(latMin, &g, &globalZone); 
     500         jFin= lat2j(latMax, &g, &globalZone); 
     501         iDeb= lon2i(lonMin, &g, &globalZone); 
     502         iFin= lon2i(lonMax, &g, &globalZone); 
     503//fprintf(stderr,"************ 1) zone:lat=%f->%f, lon=%f->%f, lat2j=%d->%d, lon2i=%d->%d, w=%d, h=%d, paslat=%f, paslon=%f\n", 
     504//              latMin,latMax,lonMin,lonMax,jDeb,jFin,iDeb,iFin,w,h,paslat,paslon); 
    444505         //la borne en width et height ne peut etre atteinte 
    445          if( iDeb == g.width) iDeb--; 
    446          if( jDeb == g.height) jDeb--; 
    447          if( iFin == g.width) iFin--; 
    448          if( jFin == g.height) jFin--; 
     506//         if( iDeb == g.width) iDeb--; 
     507//         if( jDeb == g.height) jDeb--; 
     508//         if( iFin == g.width) iFin--; 
     509//         if( jFin == g.height) jFin--; 
    449510          
    450511         // recalcul de la zone extraite 
    451          lon = i2lon(iDeb,  &g, &globalZone); 
    452          lat = j2lat(jDeb,  &g, &globalZone); 
    453          z->lonMax = i2lon(iFin, &g, &globalZone) ; 
    454          z->latMax = j2lat(jFin, &g, &globalZone) 
     512//         lonMin = i2lon(iDeb,  &g, &globalZone); 
     513//         latMin = j2lat(jDeb,  &g, &globalZone); 
     514//         lonMax = i2lon(iFin, &g, &globalZone) ; 
     515//         latMax = j2lat(jFin, &g, &globalZone) 
    455516// ajout des limites de domaines 
    456517// car les positions sont aux centres pour les macro I2 et j2 
    457          z->lonMax += paslon/2.; 
    458          z->latMax += + paslat/2.; 
    459          z->lonMin = lon - paslon/2.; 
    460          z->latMin = lat - paslat/2.; 
    461       fprintf(stderr, 
    462            "----------------------------------------------------------------------------Extrait Reel Lat min %f max %f   lon min %f max %f width %d height %d \n",  
    463 z->latMin,z->latMax,z->lonMin,z->lonMax, iFin -iDeb +1, jFin -jDeb +1); 
     518//               z->lonMax = lonMax + paslon/2.; 
     519//         z->lonMin = lonMin - paslon/2.; 
     520//         z->latMax = latMax - paslat/2.; 
     521//         z->latMin = latMin + paslat/2.; 
     522//fprintf(stderr,"************ 2) zone:lat=%f->%f, lon=%f->%f\n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
    464523          
    465524         // extraction dans une nouvelle grille 
    466          grid= allocGrid(iFin -iDeb +1, jFin -jDeb +1);fprintf(stderr,"ok grid \n"); 
     525         grid= allocGrid(iFin -iDeb +1, jFin -jDeb +1); 
     526//              grid= allocGrid((z->lonMax-z->lonMin)*paslon, (z->latMax-z->latMin)*paslon); 
    467527         if(iFin < iDeb) 
    468528         { 
    469529            freeGrid(grid); 
    470530            grid=NULL; 
    471     fprintf(stderr,"  Not now ok on partial grid crossing in longitude \n iDeb %d Ifin %d jDeb %d jFin %d\n", iDeb ,iFin, jDeb, jFin); 
     531//            fprintf(stderr,"  Not now ok on partial grid crossing in longitude \n iDeb %d Ifin %d jDeb %d jFin %d\n", iDeb ,iFin, jDeb, jFin); 
    472532         } 
    473533         else 
     
    479539           width= (iFin -iDeb +1) * sizeof(unsigned int); 
    480540           skip= g.width * sizeof(unsigned int) - width ; 
    481 // fprintf(stderr,"   ok pos %d width %d skip %d\n", pos/4 , width/4 , skip/4); 
     541//           fprintf(stderr,"*** id=%d, g.w=%d, w=%d, pos=%d, skip=%d\n", id, g.width, width, pos, skip); 
    482542           for(i=jDeb; i<=jFin; i++, data += width) 
    483543           { 
    484              if((K= lo_read(db, id, (unsigned char*)data, width)) != (unsigned long)width) 
     544                   K= lo_read(db, id, (unsigned char*)data, width); 
     545//fprintf(stderr,"*** i=%d, K=%d\n", i, K); 
     546             if(K != (unsigned long)width) 
    485547             { 
    486548               fprintf(stderr, "Err readLine ligne %d read %ld sur %d demandes\n", i, K, width);  
    487                fprintf(stderr, "EXIT trap:\n iDeb %d iFin %d jDeb %d jFin %d\n pos %d width %d skip %d\n",  
    488                                  iDeb , iFin , jDeb , jFin , pos , width , skip);  
     549               fprintf(stderr, "EXIT trap:\n iDeb %d iFin %d jDeb %d jFin %d\n pos %d width %d skip %d\n", 
     550                                 iDeb , iFin , jDeb , jFin , pos , width , skip); 
    489551               exit (1); 
    490552             } 
     
    497559         unsigned long  K, size= g.width * g.height * sizeof(int); 
    498560         grid= allocGrid(g.width , g.height); 
    499          if( (K= lo_read(db, id, (char*)grid->datas, size)) != size)  
     561         if( (K= lo_read(db, id, (char*)grid->datas, size)) != size) 
    500562            fprintf(stderr," Erreur Read OID : %ld sur %d octets\n", K, size); 
    501 //      else 
    502  //          fprintf(stderr,"  Full Read OID : %ld sur %d octets\n", K, size); 
     563//        else 
     564//              fprintf(stderr,"  Full Read OID : %ld sur %d octets\n", K, size); 
    503565       } 
    504566       lo_close(db,id); 
     
    507569     PQexec(db,("END")); 
    508570   } 
    509    fprintf(stderr,"Open OID \n"); 
     571//   fprintf(stderr,"Open OID \n"); 
    510572   return grid; 
    511573} 
     
    523585   if(checkSQLErrors(res) && PQntuples(res)) 
    524586   { 
    525       ptrParam p; 
    526587      int oid=     atoi(PQgetvalue(res, 0, 0)); 
    527588      int idParam= atoi(PQgetvalue(res, 0, 1)); 
    528589      int w=  atoi(PQgetvalue(res, 0, 2)); 
    529590      int h=  atoi(PQgetvalue(res, 0, 3)); 
    530       if(!params) params=initParams(db); 
    531       if( p= (ptrParam)search_list(params, &idParam, (PFI)inParamId) ) 
     591//      if(!params) params=initParams(db); 
     592      ptrParam p; 
     593//      if( p= (ptrParam)search_list(params, &idParam, (PFI)inParamId) ) 
     594      if( p = (ptrParam)getParamFromId(db,idParam) ) 
    532595      { 
    533596        ptrGrid g; 
     
    545608} 
    546609 
    547 LIST getGrids(EccadDB db, int idProduct, ptrParam p, ptrZone z,  
    548                       const char* dateBegin, const char* dateEnd) 
     610LIST getGrids(EccadDB db, int idProduct, int idSecteur, int idRcp, ptrParam p, ptrZone z, 
     611                      const char* dateBegin, const char* dateEnd, const char* alt) 
    549612{ 
    550613   int i; 
    551614   LIST grids=NULL; 
    552    PGresult *res; 
    553    char query[256]; 
    554    sprintf(query, 
    555       "SELECT valeurs_grille, ncol_grille,  nlign_grille, date_grille  FROM grille WHERE id_param = %d AND id_produit = %d AND date_grille BETWEEN '%s' AND '%s' order by date_grille", 
    556           p->id, idProduct, dateBegin, dateEnd); 
    557    res=PQexec(db,query); 
    558    fprintf(stderr, "found  %d grilles SQLErrors %d\n", PQntuples(res), checkSQLErrors(res)); 
     615   char query[2000]; 
     616   strcpy(query, "SELECT valeurs_grille, ncol_grille, nlign_grille, date_grille, deltadate_grille"); 
     617   strcat(query, ", (cast(date_grille+deltadate_grille as date)-1) as dateFinal FROM grille"); 
     618   if (strcmp(alt,"0")) { 
     619           strcat(query, " LEFT JOIN code ON id_grille = num_code"); 
     620   } 
     621   sprintf(&query[strlen(query)], " WHERE id_param = %d",  p->id); 
     622   sprintf(&query[strlen(query)], " AND id_produit = %d",  idProduct); 
     623   sprintf(&query[strlen(query)], " AND date_grille BETWEEN '%s' AND '%s'", dateBegin, dateEnd); 
     624   if (idSecteur != 0) { 
     625           sprintf(&query[strlen(query)], " AND id_secteur = %d",  idSecteur); 
     626   } else { 
     627           strcat(query, " AND (id_secteur is null OR id_secteur"); 
     628           strcat(query, " IN (select id_secteur from secteur where fullname_secteur <> 'Aviation'))"); 
     629   } 
     630   if (idRcp != 0) { 
     631           sprintf(&query[strlen(query)], " AND id_rcp = %d",  idRcp); 
     632   } else { 
     633           strcat(query," AND id_rcp is null"); 
     634   } 
     635   if (strcmp(alt,"0")) { 
     636           sprintf(&query[strlen(query)], " AND legend_code = '%s'",  alt); 
     637   } 
     638   strcat(query," order by date_grille"); 
     639fprintf(stderr, "********* requete= %s\n", query); 
     640        PGresult *res=PQexec(db,query); 
     641//fprintf(stderr, "found  %d grilles\n", PQntuples(res)); 
     642//fprintf(stderr, "param=%d, prod=%d, dateBeg=%s, dateEnd=%s\n", p->id, idProduct, dateBegin,dateEnd); 
    559643   if(checkSQLErrors(res) && PQntuples(res) )  
    560644   { 
    561      // origin size  
     645         // origin size 
    562646     int width= atoi(PQgetvalue(res,0,1)); 
    563647     int height= atoi(PQgetvalue(res,0,2)); 
     648//fprintf(stderr, "w=%d, h=%d\n", width,height); 
     649     ptrZone zTemp = (ptrZone)malloc(sizeof(Zone)); 
     650         memcpy(zTemp, z, sizeof(Zone)); 
     651 
    564652     for(i=0; i< PQntuples(res); i++) 
    565653     { 
     654        memcpy(z, zTemp, sizeof(Zone)); 
    566655       int oid= atoi(PQgetvalue(res,i,0) ); 
    567 /*fprintf(stderr, "Load oid %d from %dx%d grille date %s\n",  
    568 oid,  width, height, PQgetvalue(res, i, 3) );*/ 
    569  
    570 fprintf(stderr,"Avant--------- : Extrait Reel Lat min %f max %f   lon min %f max %f \n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
     656//fprintf(stderr, "Load oid %d from %dx%d grille date %s\n", oid,  width, height, PQgetvalue(res, i, 3) ); 
     657 
     658//fprintf(stderr,"Avant--------- : Extrait Reel Lat min %f max %f   lon min %f max %f \n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
    571659 
    572660 
    573661       ptrGrid g= loadDatasFromBd( db, oid, width, height, z); 
    574662        
    575 fprintf(stderr,"Après--------- : Extrait Reel Lat min %f max %f   lon min %f max %f \n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
    576       // printf("date grille %d\n",g->date); 
     663//fprintf(stderr,"AprÚs--------- : Extrait Reel Lat min %f max %f   lon min %f max %f \n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
     664//fprintf(stderr,"date grille %s\n",g->date); 
    577665       if(g) 
    578666       { 
    579667         char *date= PQgetvalue(res, i, 3); 
    580668         sprintf(g->date, "%.4s%.2s%.2s", date, &date[5], &date[8]); 
    581          if(!grids) grids = make_list(); 
    582          add_to_tail(grids, g); 
     669         char *delta= PQgetvalue(res, i, 4); 
     670         sprintf(g->delta, "%s", delta); 
     671         char *dateEndPeriod= PQgetvalue(res, i, 5); 
     672         sprintf(g->dateEndPeriod, "%.4s%.2s%.2s", dateEndPeriod, &dateEndPeriod[5], &dateEndPeriod[8]); 
     673//         sprintf(g->date, "%s", date); 
     674//fprintf(stderr,"date grille=%s, dateFinPeriode=%s, delta=%s, i=%d, nbtuples=%d\n",g->date,g->dateEndPeriod,g->delta,i,PQntuples(res)); 
     675         if(!grids) grids = make_list(); 
     676                         add_to_tail(grids, g); 
    583677       } 
    584678       else fprintf(stderr, "loadGrid error\n"); 
     
    593687ptrGrid getGrid(EccadDB db, int idGrille, ptrZone z) 
    594688{ 
    595         fprintf(stderr, "--getGrid \n");fflush(stderr); 
     689//      fprintf(stderr, "--getGrid \n");fflush(stderr); 
    596690        PGresult *res; 
    597691        char query[256]; 
    598692        sprintf(query, 
    599693      "SELECT valeurs_grille, ncol_grille, nlign_grille, date_grille FROM grille WHERE id_grille = %d;", idGrille); 
    600    fprintf(stderr, "1)-->requete %s \n",query ); 
     694// fprintf(stderr, "-->requete getGrid -> %s\n",query ); 
    601695   res=PQexec(db,query); 
    602    fprintf(stderr, "found  %d grilles SQLErrors %d\n", PQntuples(res), checkSQLErrors(res)); 
    603    fprintf(stderr, "2)-->requete %s \n",query ); 
    604696   //fprintf(stderr, "found  %d grilles SQLErrors %d\n", PQntuples(res), checkSQLErrors(res)); 
    605697   ptrGrid g = NULL; 
     
    607699   if(checkSQLErrors(res) && PQntuples(res) )  
    608700   { 
    609         fprintf(stderr, "organise \n"); 
    610701        // origin size  
    611702     int width= atoi(PQgetvalue(res,0,1)); 
     
    614705     int oid= atoi(PQgetvalue(res,0,0) ); 
    615706//fprintf(stderr,"Avant--------- : Extrait Reel Lat min %f max %f   lon min %f max %f \n",z->latMin,z->latMax,z->lonMin,z->lonMax); 
    616          
     707 
    617708     g= loadDatasFromBd( db, oid, width, height, z); 
    618709      
     
    625716        sprintf(g->date, "%.4s%.2s%.2s", date, &date[5], &date[8]); 
    626717         
    627                                 fprintf(stderr, "date grille %s \n", date); 
     718//                              fprintf(stderr, "date grille %s \n", date); 
    628719     }    
    629720   } 
    630     
     721   PQclear(res); 
    631722   return g; 
    632723} 
    633724 
     725ptrGrid getGridFromProduit(EccadDB db, char* nomProd, ptrZone z) 
     726{ 
     727        PGresult *res; 
     728        char query[256]; 
     729        sprintf(query, 
     730                "SELECT valeurs_grille, ncol_grille, nlign_grille, date_grille FROM grille WHERE id_produit in (select id_produit from produit where title_produit = '%s');", nomProd); 
     731        res=PQexec(db,query); 
     732        ptrGrid g = NULL; 
     733        if(checkSQLErrors(res) && PQntuples(res) ) 
     734        { 
     735                // origin size 
     736                int width= atoi(PQgetvalue(res,0,1)); 
     737                int height= atoi(PQgetvalue(res,0,2)); 
     738                int oid= atoi(PQgetvalue(res,0,0) ); 
     739                g= loadDatasFromBd( db, oid, width, height, z); 
     740 
     741                if(g) 
     742                { 
     743                        char *date= PQgetvalue(res, 0, 3); 
     744                        sprintf(g->date, "%.4s%.2s%.2s", date, &date[5], &date[8]); 
     745                } 
     746        } 
     747        PQclear(res); 
     748        return g; 
     749} 
    634750 
    635751double* getMaxParam(int idGrid, EccadDB conn) 
     
    645761        int idParam= atoi(PQgetvalue(res,0,0)); 
    646762         
    647         ptrParam p; 
    648         LIST params=initParams(conn); 
    649         if( p= (ptrParam)search_list(params, (NODE)&idParam, (PFI)inParamId) )   
    650                         maxParam = &p->maxi;        
     763//      ptrParam p; 
     764//      LIST params=initParams(conn); 
     765//      if( p= (ptrParam)search_list(params, (NODE)&idParam, (PFI)inParamId) ) 
     766//                      maxParam = &p->maxi; 
     767 
     768        ptrParam p = (ptrParam)getParamFromId(conn,idParam); 
     769        maxParam = &p->maxi; 
    651770    } 
    652771        return maxParam; 
     
    665784        int idParam= atoi(PQgetvalue(res,0,0)); 
    666785         
    667         ptrParam p; 
    668         LIST params=initParams(conn); 
    669         if( p= (ptrParam)search_list(params, (NODE)&idParam, (PFI)inParamId) )   
    670                         minParam = &p->mini;        
     786//      ptrParam p; 
     787//      LIST params=initParams(conn); 
     788//      if( p= (ptrParam)search_list(params, (NODE)&idParam, (PFI)inParamId) ) 
     789//                      minParam = &p->mini; 
     790 
     791        ptrParam p = (ptrParam)getParamFromId(conn,idParam); 
     792                minParam = &p->mini; 
     793 
    671794    } 
    672795     
     
    674797} 
    675798 
     799long datation (long j, long m, long a){ 
     800        long n = a*365 + (m-1)*31 + j ; 
     801        if (m <= 2) a-- ; 
     802        n = n + a/4 - a/100 + a/400 ; 
     803        if (m > 2) n = n - (int)((m-1)*0.4+2.7) ; 
     804        return n ; 
     805} 
Note: See TracChangeset for help on using the changeset viewer.