Estruturas raster na TerraLib Trabalho Prático do Curso de Introdução ao Geoprocessamento Dr. Gilberto Câmara e Dr. Miguel Monteiro Aluna: Lúbia Vinhas Doutorado em Computação Aplicada TerraLib - introdução • É uma biblioteca de componentes para a construção de aplicativos geográficos • Freeware, código fonte aberto • Desenvolvida no INPE - DPI • Parceiros: FUNCATE, TECGRAF, PRODABEL... • Ambiente para o desenvolvimento de teses e dissertações em Geoinformática TerraLib - introdução • Desenvolvida em C++ • Plataformas: Windows, Linux • Multiparadigma: orientação a objetos, programação genérica (templates e STL), padrões • Versão 1.0: prevista para Outubro de 2001 TerraLib - introdução vector<T> components_; map<int,double*>virtualMemory_; list<int> • pagesQueue_; Desenvolvida em C++ typedef map<int,double*>::const_iterator • Multiparadigma: programação genérica (STL), VirtualMemoryIterator; padrões, orientação a objetos • Versão 1.0: prevista para Outubro de 2001 • Plataformas: Windows, Linux TerraLib - introdução TeProjection* TeProjectionFactory::make(TeProjectionParams& par) {} • <class Desenvolvida em C++ template T> class TeComposite: public TeCounted • Multiparadigma: programação genérica (STL), {} padrões, orientação a objetos • Versão 1.0: prevista para Outubro de 2001 • Plataformas: Windows, Linux Terralib - introdução TeProjection virtual TeCoord2D ll2pc(TeCoord2d &p) = 0; Terralib - introdução TeProjection virtual TeCoord2D ll2pc(TeCoord2d &p) = 0; TeMiller virtual TeCoord2D ll2pc(TeCoord2d &p); TerraLib - introdução TeProjection TeAlbers TeLatLong TeLambertConformal TeMercator TeMiller TeUTM TePolyconic TerraLib - CVS • SRC : fonte básico • LIBS: bibliotecas auxiliares (tiff, shapelib, jpeg, Qt, TrueType) • CONTRIB: aplicações (visualizadores, conversores de formatos) • DOCUMENTATION: manual de programação e documentação do código TerraLib - estrutura do SRC • KERNEL (controle da DPI) : classes básicas de geometrias, raster, projeções, banco de dados, funções de topologia • DRIVERS: formatos GIS (MIF, Shape, E00, SPRING), SGDB’s (ACCESS, MySQL, PostgreSQL, Oracle), interfaces (Qt) • FUNCTIONS: algoritmos (estatística espacial) TerraLib - requisito básico • Geometrias e atributos armazenados no SGBD • Garantia de integridade dos dados • Segurança • Acesso multi-usuário TerraLib - modelo conceitual Layers Geometrias Entidades Atributos Relacionamentos Semântica TerraLib - classes básicas TerraLib - Raster • Estruturas raster são estruturas matriciais: – valores numéricos (diferentes tamanhos e precisões), como por exemplo imagens. – índice para uma palheta de cores, como por exemplo uma imagem sintética, ou para um conjunto de classes, como no caso de uma imagem classificada TerraLib - Raster • Formatos – formatos conhecidos: GIF, TIFF, JPEG, GeoTiFF, GRIB, Bitmap – sem formato: RAW • Armazenamento – arquivos – banco de dados – distribuído Características de um raster • Um dado raster pode ter associado a si os parâmetros: – projeção cartográfica – retângulos envolventes – nome de arquivo ou ponteiro para banco – modo de acesso quanto a leitura e escrita Características do Raster – retângulos envolventes outterbox – resolução espacial innerbox Características do Raster – número de linhas – número de colunas – resolução espacial (X e Y) – valor de deslocamento (offset ) – informações sobre bandas espectrais – tipo do dado (unsigned char, char, int, ...) Classe TeRasterParams • Abriga os parâmetros que definem o raster • Garante a coerência entre eles – setRasterParamsWithInnerBox(...) – setRasterParamsWithOutterBox(...) – ... Classe Raster • Encapsula o conceito da estrutura raster exportando sua interface para aplicações e algoritmos • Independe da natureza do dado, da sua forma de armazenamento ou acesso • Faz parte do Kernel • Mantêm valores numéricos com dupla precisão – (double : 1.7E +/- 308 (15 dígitos) Classe Raster • A classe raster precisa prover mecanismos para: – criar, inicializar e fechar um raster – ter acesso de leitura e escrita, quando possível, aos seus elementos indexados por linha, coluna e banda – tratar possíveis LUT´s ou índices – manter sua estrutura de RasterParams • Estrutura “contada” TerraLib - Geometrias class TeCounted { public: // -- Contructors TeCounted(): refCount_ ( 0 ){} // -- Methods void attach () { refCount_++; } void detach () { if ( --refCount_ == 0 ) delete this; } int refCount() { return refCount_; } // -- Destructor virtual ~TeCounted(){} private: // No copy allowed TeCounted(const TeCounted&); TeCounted& operator=(const TeCounted&){return *this;} // -- Members int refCount_; }; template <class T> class TeComposite: public TeCounted { public: using TeCounted::attach; using TeCounted::detach; // Add a new component void add ( const T& elem ) { components_.push_back ( elem ); } // Remove the i-th component bool erase ( int i ) { if ( components_.size() < i ) return false; return ! ( components_.erase ( components_.begin() + i ) == components_.end() ); } // Remove an element bool erase ( T& elem ) { return ! ( components_.erase ( elem ) == components_.end() ); } // Find out the size of the composite int size() { return components_.size(); } // Return the i-th element T& operator [] ( int i ) { return components_[ i ]; } protected: vector<T> }; components_; Decodificadores Raster • Devem implementar efetivamente o acesso a um determinado raster • São responsáveis por: – acessar o dado onde esteja armazenado – extrair os parâmetros do raster de seu formato quando possível • Podem implementar diferentes tecnologias de acesso a um dado raster • Biblioteca: existe uma classe básica • Contribuidores implementam derivações desta Decodificadores Raster • Quanto a tecnologia de implementação – memory map para arquivos em disco – memória virtual – banco de dados • Quanto a formatos – – – – decodificadores de TIFF/GeoTiff decodificadores de GRIB decodifcadores de JPEG decodificadores RAW TeRasterView • Protótipo para implementação das classes propostas e avaliação – Interface baseada em Qt – Visual C++ em Windows Questões em aberto • Completude da classe TeRaster – será ditado pelas aplicações • Completude da classe TeDecoder – será ditado pelos novos decodificadores • Como tratar o caso de imagens classificadas – LUT´s e índices devem estar no raster ou nos decodificadores Conclusões • A engenharia envolvida na concepção de um classe básica da TerraLib requer várias idas e vindas • As diferentes aplicações ditam diferentes requisitos de classes básicas. Muitas vezes é difícil decidir o que é básico. • TeRaster + TeDecoder : até agora é uma boa solução Futuro próximo... • Implementar novos decodificadores de formato: GRIB e JPEG • Implementar decodificadores de raster em banco de dados • Rever o algoritmo de memória virtual para diversos tipos de acesso aos elementos do raster • Resolver o problema das imagens sintéticas e classificadas Futuro próximo... • Criar um formato XML para dados raster raw • Adicionar mais funcionalidades ao TerraRasterView para que possa ser incluído no CONTRIB <?xml version="1.0" ?> - <raster> Futuro próximo - <projection> • Implementar<name> pelo menos de UTM decodificadores </name> GRIB e JPEG ... • Rever o algoritmo de memória virtual </ projection > • Resolver o problema das imagens sintéticas e <lines>382</lines> classificadas • Criar <columns>Reminder</columns> um formato XML para dados raster raw • Adicionar .... mais funcionalidades ao TerraRasterView para que possa ser incluído no </raster> CONTRIB FIM!