Salut à toutes et à tous !
Honte à moi, je ne comprends pas ce qui se passe dans la boucle for suivante : la boucle n'effectue que la première itération (le reste, mystère) et la suite du code s'exécute normalement.
Qu'est ce qui peut faire que l'itération "manuelle" réussisse quand la boucle for plante (sans vraiment planter d'ailleurs...) ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 unsigned int time = 1; unsigned id = 0; int x =1; for(int y = 1; y < 4; y++){ auto coords = make_pair(x, y); std::cout << "in loop :" << environment(id, coords, time) << std::endl; } std::cout << "in main : " << environment(id, std::make_pair(x, 1), time) << std::endl; std::cout << "in main : " << environment(id, std::make_pair(x, 2), time) << std::endl; std::cout << "in main : " << environment(id, std::make_pair(x, 3), time) << std::endl;
environnement est un objet qui implémente l'opérateur () : il trouve un jeu de donnée dans une map et délègue la lecture au jeu de donnée en question qui implémente l'opérateur () suivant (implémentation suspicieuse : forcément, visez qui l'a écrit) :
J'essaie de mon mieux, mais oui c'est crado, l'utilisation de l'API de GDAL ne m'aidant malheureusement pas !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 value_type operator()(coord_type p, time_type t) const { GDALRasterBand *poBand = resource->GetRasterBand( int(t) ); if(!poBand) throw std::string("unable to access band"); float *val; int x = p.first; int y = p.second; poBand->RasterIO( GF_Read, x, y, 1, 1, val, 1, 1, GDT_Float32, 0, 0 ); if(!val) throw std::string("unable to read data"); return double(*val); }
Merci !
Partager