Top Banner
PDI em TerraLib Time TerraLib
42

PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

PDI em TerraLib

Time TerraLib

Page 2: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraLib

Biblioteca de software para construção de SIGs:

Código fonte aberto ( GNU Lesser General Public License )

Público alvo: desenvolvedores de software com conteúdo geográfico

Escrita em C++ Multi-plataforma ( Linux, Windows) Utiliza outras bibliotecas livres Arquitetura integrada (uma única

base de dados)

atributos

SIGSIG

SGBD

Page 3: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI

Módulo TerraLib para processamento de imagens. Objetivo: Repositório de algoritmos de PDI.

SGBDSGBD

TerraLib KernelTerraLib Kernel

APLICATIVOSAPLICATIVOS

TePDITePDI

C++ ( código aberto – segue a mesma licença da TerraLib )

Não vinculado à bases de dados.

Page 4: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI

Documentação On-line http://www.terralib.org

Documentação embutida no código ( Doxygen ). http://www.stack.nl/~dimitri/doxygen/

Page 5: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Obtendo o código em http://www.terralib.org Em um arquivo ZIP Utilizando o repositório TerraLib (CVS)

Estrutura de diretórios

Raiz (zip ou CVS) src Código Fonte

terralib image_processing

terralibw Projetos para Windows terralib image_processing

terralibx Projetos para Linux terralib image_processing

exemplos Exemplos (somente por CVS) image_processing

TePDI

Page 6: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Compilação Windows Visual Studio .NET Linux GCC

Raiz (zip ou CVS) src terralibw Projetos para Windows

terralib terralib.vcproj

image_processing terralibpdi.vcproj

terralibx Projetos para Linux terralib

Makefile image_processing

Makefile Exemplos image_processing

image_processing.sln Makefile

TePDI

Page 7: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TeRaster (Terralib kernel)

Funções Prover uma interface única para manipulação de dados matriciais em

TerraLib. GTIFF, JPEG, SPRING, MRSID, etc.

Transparência quanto à forma de armazenamento. Memória, disco ou banco de dados.

TeRaster

TeDecoder

TeRasterParams

TeDecoderTIFF TeDecoderDatabase ?????

Page 8: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TeRaster (Terralib kernel)

Métodos mais utilizados:

init( TeRasterParams& ) Reinicializa a instância seguindo novos parâmetros.

getElement( int col, int line, double& value, int band ) Provem uma cópia do valor do elemento existente na posição indicada.

setElement( int col, int line, double value, int band ) Configura o valor do elemento na posição indicada.

params() – Retorna a referência para os parâmetros atuais da instância.

Page 9: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TeRaster (Terralib kernel)

Exemplo 1 – Criando uma instância vinculada a um arquivo de imagem em disco (somente leitura):

#include <TeRaster.h>

TeRaster raster_instance1( “nome_arquivo.tif”, “r” );

TeRaster raster_instance2( “nome_arquivo.jpeg”, “r” );

Page 10: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TeRaster (Terralib kernel)

Exemplo 2 – Criando uma instância vinculada a uma nova imagem em memória:

#include <TeRaster.h>

TeRasterParams params;

params.nBands( 1 );

params.nlines_ = l0;

params.ncols_ = 10;

params.mode_ = “c";

params.decoderIdentifier_ = "MEM";

TeRaster raster_instance;

raster_instance.init( params );

Page 11: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TeRaster (Terralib kernel)

Exemplo 3 – Criando uma instância vinculada a um novo arquivo de imagem em disco:

#include <TeRaster.h>

TeRasterParams params;

params.nBands( 1 );

params.nlines_ = l0;

params.ncols_ = 10;

params.mode_ = “c";

params.fileName_ = “nome_arquivo.tif";

params.decoderIdentifier_ = “TIF";

TeRaster raster_instance;

raster_instance.init( params );

Page 12: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Iteradores (TeRaster::iterator - Terralib kernel)

Função: Prover uma interface para acessar elementos de imagem de formas diferenciadas.

Exemplo: TeRaster::iterator_poly.

TeRaster::iterator

TeRaster::iterator_poly ?????

TePolygon

Page 13: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Iteradores (TeRaster::iterator - Terralib kernel)

Exemplo/Aplicação: Mosaico + Blending

IMAGEM A

IMAGEM B

Projeção A

Projeção B

IMAGEM

B

IMAGEM A

Projeção A

Imagem Resultante

Iterador 1

Iterador 3

Iterador 2

Page 14: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Iteradores (TeRaster::iterator - Terralib kernel)

Exemplo/Código:#include <TeRaster.h>

#include <TeGeometry.h>

TePolygon polygon_instance;

TeRaster raster_instance;

TeRaster::iteratorPoly it =

raster_instance.begin( polygon_instance, TeBoxPixelIn, 0 );

TeRaster::iteratorPoly it_end =

raster_instance.end( polygon_instance, TeBoxPixelIn, 0 );

While( it != it_end ) {

double valor_pixel = *it( 0 );

++it;

};

Page 15: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - Estrutura

Hierarquia de algoritmos Uma interface única para algoritmos.

Page 16: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - Estrutura

Para executar um algoritmo:Método Reset ( TePDIParameters )

Método CheckParameters (TePDIParameters )

Método Apply()

Page 17: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - Estrutura

#include <TePDIContrast.hpp>

TeRaster inRaster;

TeRaster outRaster;

TePDIParameters params;

params.SetParameter( "contrast_type", TePDIContrast::TePDIContrastMinMax; );

params.SetParameter( "input_image", inRaster );

params.SetParameter( "output_image", outRaster );

params.SetParameter( "band", (int)0 );

TePDIContrast contra_instance;

contra_instance.Reset( params );

contra_instance.Apply();

Exemplo (contraste):

Page 18: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - Estrutura

Como criar um novo algoritmo:Método CheckParameters (TePDIParameters )

Método ResetState()

Método RunImplementation()TePDIAlgorithm

TePDIMyAlgorithm

CheckParameters (TePDIParameters )

ResetState()

RunImplementation()

Page 19: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - Estrutura

#include <TePDIAlgorithm.hpp>

class TePDIMyAlgorithm : public TePDIAlgorithm

{

public :

TePDIMyAlgorithm();

~TePDIMyAlgorithm();

bool CheckParameters( const TePDIParameters& parameters ) const;

protected :

void ResetState( const TePDIParameters& params );

bool RunImplementation();

};

Exemplo (contraste):

Page 20: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - EstruturaFábricas de algoritmos (Padrão de Projeto Factory)

Prover maior modularização

Facilitar a manutenção de código diante de atualizações ou adição de novos algoritmos.

TePDIAlgorithm

TePDIMosaic

TePDIAlgorithmFactory

TeFactory< T >

TePDIMosaicFactory

Gabarito

Abstrata

Concreta

Page 21: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - EstruturaFábricas de algoritmos (Padrão de Projeto Factory)

Exemplo sem utilização da fábrica de algoritmos:#include <TePDIMosaic.hpp>

TePDIParameters params;

TePDIMosaic mosaic_instance;

mosaic_instance.Reset( params );

mosaic_instance.Apply();

Exemplo com utilização da fábrica de algoritmos:#include <TeAlgorithmFactory.hpp>

TePDIParameters params;

TePDIAlgorithm::pointer mosaic_pointer( TePDIAlgorithmFactory::make( "TePDIMosaic", params ) );

mosaic_pointer->Apply();

Page 22: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - EstruturaEstratégias de algoritmos (Padrão de Projeto Strategy)

Prover maior modularização.

Facilitar a manutenção de código diante de atualizações ou adição de novos algoritmos.

Estratégia ???Porções de código com comportamento semelhante mas que executam uma mesma tarefa de formas distintas.

TePDIMosaic

TePDIGeoMosaicStrategy

TePDITieMosaic

?????

TePDINoBlendingStrategy

TePDIEuclidianBlendingStrategy

TePDINoBlendingStrategy

TePDIEuclidianBlendingStrategy

Page 23: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - EstruturaEstratégias de algoritmos (Padrão de Projeto Strategy)

TePDIMosaic

TePDIStrategy

TePDITieMosaicStrategy TePDIGeoMosaicStrategy ????

TePDIStrategy

TePDIParameters params;

params.SetParameter( “mosaic_type”, “geo_mosaic” );

TePDIAlgorithm::pointer mosaic_pointer( TePDIAlgorithmFactory::make( "TePDIMosaic", params ) );

Page 24: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TePDI - EstruturaFábricas de estratégias de algoritmos

TePDIStrategy

TePDIGeoMosaicStrategy

TePDIStrategyFactory

TeFactory< T >

TePDIGeoMosaicStrategyFactory

Gabarito

Abstrata

Concreta

Page 25: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.
Page 26: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Função: Prover uma base de funções e classes para permitir e facilitar a

construção de plugin’s para a manipulação de dados raster TerraLib. Prover mecanismos e facilidades para a integração daqueles plugin’s na

forma de código independente carregado dinamicamente.

Plugin’s ???

São mini-aplicativos que dependem de outro aplicativo para serem executados.

Recebem dados/parâmetros do aplicativo ao qual são vinculados. Permitem interação com o aplicativo vinculado.

Page 27: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Arquitetura

TePDI

TerraLibTerraLib

TerraPixelTerraPixel

Usuário

PluginPlugin

Page 28: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Características

Escrito em linguagem C++. Portabilidade ( Windows, Linux ). Baseado em classes/funções TerraLib/TePDI ( TeRaster, TePDIAlgorithm,

etc. ). Utiliza classes/funções QT para prover a componente visual. Utiliza classes/funções LibSPL para prover a funcionalidade de

carregamento dinâmico de código.

Page 29: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Obtendo o código utilizando CVS: cvs -d :pserver:[email protected]:/home/terralib co

aplicativos/terraPixel

Raiz (CVS) aplicativos

terraPixel

terraPixel Código do aplicativo Plugins Código de plugin’s

src terralibw terralibx exemplos

Page 30: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Arquitetura

Requisito: Permitir compartilhamento de objetos ( TeRaster, TePolygon, etc. ) entre

plugin’s e o aplicativo principal.

Problema: Código carregado dinamicamente não compartilha o mesmo HEAP do

aplicativo.

Possível solução: Copiar o objeto de uma área para a outra

Nem sempre é viável ( Ex: TeRaster ).

PortabilidadeLimitações de Memória Win32

Page 31: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Arquitetura

Exemplo: TerraPixel vinculado a Terralib. Plugin vinculado a Terralib. Plugin instância um TeRaster e passa a sua referência para o aplicativo.

TerraPixel Plugin

TeRaster * TeRaster

Problema: Objetos podem ser modificados somente na mesma área de código

onde foram criados. Objetos podem ser destruídos somente na mesma área de código onde

foram criados.

Page 32: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Arquitetura

Possível solução – Cópia de objetos de uma área para outra: Nem sempre é viável ( Ex: TeRaster ).

Resolução: Gerente de objetos

TerraPixel

ObjectsManager

Plugin

ObjectsManager

Lista Visual

Visualização

Algoritmo

Page 33: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Arquitetura

Resolução: Gerente de objetos Gabarito em função do tipo de dado a ser armazenado. BTree indexada por strings. Armazena referências compartilhadas dos objetos ( TeSharedPtr ). 2 modos de operação (master,slave) sincronizados (TeCommunicator).

ObjectsManager< T >

RastersManager PolygonsManager

Page 34: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Arquitetura

Resolução: Gerente de objetos

TerraPixel

TeRaster1 *

RastersManager(Master)

TeRaster2

Plugin

RastersManager(Slave)

TeRaster1

TeRaster2 *

TeCommunicator<string>

TeSharedPtr< TeRaster >

TeSharedPtr< TeRaster >

TeSharedPtr< TeRaster >

TeSharedPtr< TeRaster >

Page 35: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Plugin’s – Desenvolvimento

Utilização de um projeto QT base que provém : Includes básicos necessários para plugins. Link com as bibliotecas necessárias. Definições de compilação necessárias.

Raiz (CVS)aplicativos

terraPixelterraPixelplugins

source base base.pro

srcterralibwterralibxexemplos

Page 36: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Plugins – Desenvolvimento

SPL_DEFINE_PLUGIN_INFO – Definição da interface informações sobre o plugin.

Informações sobre a versão ( build, minor, major version). Informações de identificação do Plugin (requisitadas pelo aplicativo). Informações sobre o desenvolvedor. Informação sobre a versão da interface esperada para receber dados

do aplicativo.

Page 37: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Exemplo de código

SPL_DEFINE_PLUGIN_INFO(

1, ///< The build number.

1, ///< The major version (e.g. 1.xx).

0, ///< The minor version (e.g. 0.10).

true, ///< Plugins arguments to the public?

"Mosaic", ///< The plugin's name.

"INPE", ///< The plugin's vendor.

"TerraPixel Mosaic Plugin", ///< The plugin's general description.

PLUGINPARAMETERS_VERSION, ///< The expected plugin parameters version.

"http://www.dpi.inpe.br/terralib", ///< The plugin vendor's homepage.

"[email protected]", ///< The plugin vendor's email address.

"TerraPixelPlugin" ); ///< The plugin's UUID.

Page 38: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel

Plugins – Desenvolvimento

SPL_RUN_NAME_CODE - Definição do ponto de entrada do plugin.

Parâmetros passados pelo aplicativo: Apontadores para as instâncias de todos os gerentes de objetos. Interfaces de todas as instâncias de objetos que possibilitam

interação com o usuário (Navegadores visuais de raster, etc). Apontador para a classe que guarda parâmetros globais.

Page 39: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Exemplo de código

SPL_PLUGIN_API bool SPL_RUN_NAME_CODE( slcPluginArgs* a_pPluginArgs )

{

void* arg_ptrs[ 1 ];

a_pPluginArgs->GetArg( 0, arg_ptrs );

PluginParameters* plug_pars_ptr = ( PluginParameters* ) arg_ptrs[ 0 ];

static RastersManager slave_rm_instance(

*(plug_pars_ptr->rasters_manager_ptr_) );

..........

Código do plugin

..........

return true;

}

Page 40: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

TerraPixel Plugins – Exemplo: Mosaico

C++ Utiliza QT para prover a componente gráfica. Utiliza LibSPL para a interface de carregamento dinâmico de código. Utiliza classes TerraLib para armazenar dados ( matriciais e vetoriais ). Utiliza classes TerraLibPDI para processar dados.

Page 41: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

Dúvidas ???

Page 42: PDI em TerraLib Time TerraLib. TerraLib Biblioteca de software para construção de SIGs: Código fonte aberto ( GNU Lesser General Public License ) Público.

http://www.terralib.org