terraradar aplicativo para tratamento de imagem de radar utilizado através de dois tipos de...
TRANSCRIPT
TerraRadarAplicativo para tratamento de imagem de Radar
Utilizado através de dois tipos de interface :
•TerraView - (QT)•Browser - (PHP)
TerraRadarDesign patterns utilizados :
1. Strategy (para a família de algoritmos que operam sobre as imagens de Radar)
2. Template Method (para definir, através de subclasses, passos de um algoritmo sem mudar a estrutura do mesmo)
TerraRadarDesign patterns utilizados :
3. Iterator (para realizar operação de convolução sobre uma imagem)
4. Singleton (garantir que o mapa de estratégias seja instanciado uma única vez)
Strategyclass Estrategia {public:
virtual void Executa( TeRaster* radar ) = 0;virtual ~Estrategia(){}
protected:Estrategia(){}
};
class Convolucao {public:
Convolucao( const string& name, TeRaster* radar);~Convolucao(){ if( _estrategia ) delete _estrategia; }void Executar( TeRaster* radar );
private:Estrategia* _estrategia;
};
Template Methodclass CoeficienteVariacao : public Estrategia {public:
CoeficienteVariacao(){}~CoeficienteVariacao(){}virtual void Executa( TeRaster* radar );
private:virtual double needSQRT(double) = 0;double CalcMedia(Vetor& v);
};
class CoeficienteVariacao_Amplitude : public CoeficienteVariacao {public:
CoeficienteVariacao_Amplitude(){}~CoeficienteVariacao_Amplitude(){}double needSQRT(double val) { return (val); }
private:static RegistraEstrategia<CoeficienteVariacao_Amplitude> _registra;
};
Template MethodVoid CoeficienteVariacao::Executa( TeRaster* radar ){......
TeRaster::iterator it(0, 0, params.ncols_-n, params.nlines_-m, 1, radar);for (it = radar->begin(); it != radar->end(); ++it){
v = it.get_vector_mask(m,n);media = CalcMedia(v);cv = 0.;j = 0;........
cv = needSQRT(cv);
.......}
Singleton
class MapEstrategias : public singleton< map<string, Estrategia*> >
{};
template< class T > class RegistraEstrategia{public:
RegistraEstrategia( const string& name, T* estrategia ){ MapEstrategias().instance()[name] = estrategia; }
};
Iterator class TeRaster : public TeGeometry {......
class iterator {........
vector<double> get_vector_mask(int m, int n) { vector<double> vt; double val; for (int j=linCurrent_; j<linCurrent_+n; ++j) {
for (int i=colCurrent_; i<colCurrent_+m; ++i){
raster_->getElement(i,j,val,0); vt.push_back(val); }
} return vt; }
....... }
}
Interface TerraViewVoidTerraView::radarToolsVariation_CoeficientAction_activated(){
TeLayer* layer = currentTheme()->layer();if(!layer){
cout << "Failed to get the current theme." << endl;exit(0);
}
TeRaster* radar = layer->raster();
Convolucao op("CoeficienteVariacao_Amplitude", radar);
delete layer;delete radar;
}
Interface PHPint main(int argc, char* argv[]){ // Opens a connection to a database accessible though MySQL
string host = argv[1], dbname = argv[2], user = argv[3], layer = argv[4];
TeDatabase* db_ = new TeMySQL();if (!db_->connect(host,user,"",dbname)) exit(0);
// Loads a layer by its name TeLayer *layer = new TeLayer(layer);
if (!db_->loadLayer(layer)) {db_->close(); exit(0);}
TeRaster* radar = layer->raster();
Convolucao op("CoeficienteVariacao_Amplitude", radar);
return 0;}