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!
Download

Estruturas Raster na TerraLib - DPI