Changeset 70 for ether_eccad/trunk/API_EXTRACT/src/eccad.c
- Timestamp:
- 04/26/10 19:12:49 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
ether_eccad/trunk/API_EXTRACT/src/eccad.c
r68 r70 1 1 #include "eccad.h" 2 3 2 4 3 EccadDB connectEccadDB(const char* server, const char* dbName, … … 10 9 if (PQstatus(conn) == CONNECTION_BAD) 11 10 { 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)); 14 13 PQfinish(conn); 15 14 } … … 24 23 } 25 24 26 gdImagePtr grid2img(EccadDB db, ptrGrid g, ptrParam p, int idMap )25 gdImagePtr grid2img(EccadDB db, ptrGrid g, ptrParam p, int idMap, int idClassdis) 27 26 { 28 27 gdImagePtr im=NULL; 29 28 register int i,j; 30 29 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 38 34 if(map) 39 35 { 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 } 54 53 } 55 fprintf(stderr," ok\n" );56 54 return im; 57 55 } 58 56 59 // insertion d'une c olormap dans une image gd57 // insertion d'une classmap dans une image gd 60 58 // aucune couleur ne doit etre alloue dans l'image d'origine 61 59 void colorAllocate(gdImagePtr im, LIST map) … … 72 70 73 71 char * 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) 75 73 { 76 74 char *fileName=NULL; … … 102 100 LIST map; 103 101 104 if( map = mapOfParamById(db, idMap, mini, maxi))102 if( map = mapOfParamById(db, idMap, idClassdis, mini, maxi)) 105 103 { 106 104 gdImagePtr im; … … 109 107 register int i,j; 110 108 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); 112 110 colorAllocate(im, map); 113 111 for (j=0 ; j < im->sy; j++) … … 137 135 } 138 136 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"); 140 138 freeGrid(g); 141 139 } … … 147 145 } 148 146 149 char * getRaster(const char *dbHost, const char * dbName, const char *dbUser, int idGrille, int idMap )147 char * getRaster(const char *dbHost, const char * dbName, const char *dbUser, int idGrille, int idMap, int idClassdis) 150 148 { 151 149 char *resultFile; … … 153 151 char query[256]; 154 152 153 //sprintf(query,"/tmp/%d.%d.%d.png", idGrille, idMap, idClassdis); 155 154 sprintf(query,"/tmp/%d.%d.png", idGrille, idMap); 156 155 resultFile= strdup(query); … … 162 161 163 162 if((db= PQsetdbLogin(dbHost,"5432", NULL, NULL, dbName, dbUser, NULL)) && 164 (PQstatus(db) != CONNECTION_BAD) ) 165 163 (PQstatus(db) != CONNECTION_BAD) ) 166 164 { 167 165 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); 171 167 res=PQexec(db,query); 172 168 if(checkSQLErrors(res) && PQntuples(res)) … … 175 171 int width= atoi(PQgetvalue(res, 0, 2)); 176 172 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); 179 174 } 180 175 else fprintf(stderr, "No found id-grille %d\n", idGrille); … … 182 177 PQfinish(db); 183 178 } 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); 186 180 resultFile= fileName; 187 181 } … … 197 191 if (conn==NULL || PQstatus(conn) == CONNECTION_BAD) 198 192 { 199 return (int)NULL;193 return 0==1; 200 194 } 201 195 else{ … … 280 274 for(i=0; i< PQntuples(res); i++) 281 275 { 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)); 285 277 //fprintf(stderr, " PQgetvalue-> maxPar %f", (double)strtod(PQgetvalue(res, i, 6),NULL)); 286 278 287 279 ptrParam p= allocParam( 288 280 atoi(PQgetvalue(res, i, 0)), //id 289 atoi(PQgetvalue(res, i, 2)), //id unit 281 atoi(PQgetvalue(res, i, 2)), //id unite 290 282 PQgetvalue(res, i, 3), // full name 291 atof(PQgetvalue(res, i, 6)), // minP par292 atof(PQgetvalue(res, i, 7)) ); // maxPar283 atof(PQgetvalue(res, i, 6)), // minPar 284 atof(PQgetvalue(res, i, 7)),NULL); // maxPar 293 285 add_to_tail(params, p); 294 286 } … … 299 291 } 300 292 293 ptrParam 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 315 ptrParam 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 301 337 // generation de la table de couleur d'une map de la base 302 338 // idMap : id de la base 303 339 // mini/maxi : valeurs min max du parametre de la base 304 // ces deux valeurs sont n éssaire car les intervalles de couleurs340 // ces deux valeurs sont nécessaire car les intervalles de couleurs 305 341 // sont codes en unsigned maxhort / au extremes du param 306 342 307 LIST mapOfParamById(EccadDB conn, int idMap, double mini, double maxi)343 LIST mapOfParamById(EccadDB conn, int idMap, int idClassdis, double mini, double maxi) 308 344 { 309 345 LIST map=NULL; … … 313 349 314 350 int isDynamic = 0; 351 352 /*****************/ 353 //mini=-1; 354 //maxi=100; 355 //int pas=10; 356 /****************/ 315 357 316 358 // mapping des couleurs de la base 317 359 if(!colors) colors=initColors(conn); 318 360 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 324 365 sprintf(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); 367 res=PQexec(conn,query); 327 368 if(checkSQLErrors(res) && PQntuples(res)) 328 369 { 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); 335 375 res=PQexec(conn,query); 336 if(checkSQLErrors(res) && PQntuples(res)) 376 if(checkSQLErrors(res) && PQntuples(res)) 337 377 { 338 378 // mise en place des intervalles base dans la liste map … … 340 380 register int i; 341 381 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; 345 386 for(i=0; i< PQntuples(res); i++) 346 387 { 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); 374 418 } 375 419 else … … 380 424 } 381 425 } 382 else 426 else fprintf(stderr, "No found color for idMap %d\n", idMap); 383 427 384 428 PQclear(res); … … 387 431 } 388 432 389 //generation d'une table de couleur en fo bction 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) 391 435 { 392 436 LIST map=NULL; … … 395 439 396 440 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); 398 442 res=PQexec(conn,query); 399 443 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); 401 445 PQclear(res); 402 446 return map; 403 } 447 }*/ 404 448 405 449 // w, h : size of origin grid isur zone globale implicite … … 418 462 if( (id = lo_open(db, oidGrille, INV_READ)) != -1) 419 463 { 420 double eps=0.000001;421 422 464 if ((z != NULL) && memcmp(z, &globalZone, sizeof(Zone)) ) 423 465 { 424 466 int iDeb ,iFin, jDeb, jFin; 425 467 double paslon, paslat; 426 float x, y, lat , lon;468 float x, y, latMin, lonMin, latMax, lonMax; 427 469 unsigned long K; 428 470 // le pas dorigine … … 430 472 paslon= pasLon(&globalZone, &g); 431 473 // 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); 444 505 //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--; 449 510 450 511 // 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) 455 516 // ajout des limites de domaines 456 517 // 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); 464 523 465 524 // 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); 467 527 if(iFin < iDeb) 468 528 { 469 529 freeGrid(grid); 470 530 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); 472 532 } 473 533 else … … 479 539 width= (iFin -iDeb +1) * sizeof(unsigned int); 480 540 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); 482 542 for(i=jDeb; i<=jFin; i++, data += width) 483 543 { 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) 485 547 { 486 548 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); 489 551 exit (1); 490 552 } … … 497 559 unsigned long K, size= g.width * g.height * sizeof(int); 498 560 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) 500 562 fprintf(stderr," Erreur Read OID : %ld sur %d octets\n", K, size); 501 // 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); 503 565 } 504 566 lo_close(db,id); … … 507 569 PQexec(db,("END")); 508 570 } 509 fprintf(stderr,"Open OID \n");571 // fprintf(stderr,"Open OID \n"); 510 572 return grid; 511 573 } … … 523 585 if(checkSQLErrors(res) && PQntuples(res)) 524 586 { 525 ptrParam p;526 587 int oid= atoi(PQgetvalue(res, 0, 0)); 527 588 int idParam= atoi(PQgetvalue(res, 0, 1)); 528 589 int w= atoi(PQgetvalue(res, 0, 2)); 529 590 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) ) 532 595 { 533 596 ptrGrid g; … … 545 608 } 546 609 547 LIST getGrids(EccadDB db, int idProduct, ptrParam p, ptrZone z,548 const char* dateBegin, const char* dateEnd )610 LIST getGrids(EccadDB db, int idProduct, int idSecteur, int idRcp, ptrParam p, ptrZone z, 611 const char* dateBegin, const char* dateEnd, const char* alt) 549 612 { 550 613 int i; 551 614 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"); 639 fprintf(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); 559 643 if(checkSQLErrors(res) && PQntuples(res) ) 560 644 { 561 // origin size 645 // origin size 562 646 int width= atoi(PQgetvalue(res,0,1)); 563 647 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 564 652 for(i=0; i< PQntuples(res); i++) 565 653 { 654 memcpy(z, zTemp, sizeof(Zone)); 566 655 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); 571 659 572 660 573 661 ptrGrid g= loadDatasFromBd( db, oid, width, height, z); 574 662 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); 577 665 if(g) 578 666 { 579 667 char *date= PQgetvalue(res, i, 3); 580 668 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); 583 677 } 584 678 else fprintf(stderr, "loadGrid error\n"); … … 593 687 ptrGrid getGrid(EccadDB db, int idGrille, ptrZone z) 594 688 { 595 fprintf(stderr, "--getGrid \n");fflush(stderr);689 // fprintf(stderr, "--getGrid \n");fflush(stderr); 596 690 PGresult *res; 597 691 char query[256]; 598 692 sprintf(query, 599 693 "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 ); 601 695 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 );604 696 //fprintf(stderr, "found %d grilles SQLErrors %d\n", PQntuples(res), checkSQLErrors(res)); 605 697 ptrGrid g = NULL; … … 607 699 if(checkSQLErrors(res) && PQntuples(res) ) 608 700 { 609 fprintf(stderr, "organise \n");610 701 // origin size 611 702 int width= atoi(PQgetvalue(res,0,1)); … … 614 705 int oid= atoi(PQgetvalue(res,0,0) ); 615 706 //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 617 708 g= loadDatasFromBd( db, oid, width, height, z); 618 709 … … 625 716 sprintf(g->date, "%.4s%.2s%.2s", date, &date[5], &date[8]); 626 717 627 fprintf(stderr, "date grille %s \n", date);718 // fprintf(stderr, "date grille %s \n", date); 628 719 } 629 720 } 630 721 PQclear(res); 631 722 return g; 632 723 } 633 724 725 ptrGrid 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 } 634 750 635 751 double* getMaxParam(int idGrid, EccadDB conn) … … 645 761 int idParam= atoi(PQgetvalue(res,0,0)); 646 762 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; 651 770 } 652 771 return maxParam; … … 665 784 int idParam= atoi(PQgetvalue(res,0,0)); 666 785 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 671 794 } 672 795 … … 674 797 } 675 798 799 long 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.