TerraRadar Aplicativo para tratamento de imagem de Radar Utilizado através de dois tipos de...

Post on 17-Apr-2015

104 views 0 download

Transcript of TerraRadar Aplicativo para tratamento de imagem de Radar Utilizado através de dois tipos de...

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;}