A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

PDI em TerraLib Time TerraLib.

Apresentações semelhantes


Apresentação em tema: "PDI em TerraLib Time TerraLib."— Transcrição da apresentação:

1 PDI em TerraLib Time TerraLib

2 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 SIG SGBD The TerraML computational architecture has been implemented as software components to be provided by a GIS library called TerraLib. TerraLib is an open-source general-purpose GIS library under development at the Brazil’s National Institute for Space Research (INPE). TerraLib aims to enable the development of a new generation of GIS applications, based on the technological advances on spatial databases. The basic idea behind TerraLib is that the current and expected advances in database technology will enable, in the next few years, the complete integration of spatial data types in data base management systems (DBMS). This integration is bound to change completely the development of GIS technology, enabling a transition from the monolithic systems of today (that contain hundreds of functions) to a generation of spatial information appliances, small systems tailored to specific user needs.

3 TePDI Módulo TerraLib para processamento de imagens.
Objetivo: Repositório de algoritmos de PDI. SGBD TerraLib Kernel APLICATIVOS TePDI C++ ( código aberto – segue a mesma licença da TerraLib ) Não vinculado à bases de dados.

4 TePDI Documentação On-line
Documentação embutida no código ( Doxygen ).

5 TePDI 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 terralibx  Projetos para Linux exemplos  Exemplos (somente por CVS)

6 TePDI 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 Makefile Exemplos image_processing.sln

7 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 TeRasterParams TeDecoder TeDecoderTIFF TeDecoderDatabase ?????

8 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.

9 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” );

10 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 );

11 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 );

12 Iteradores (TeRaster::iterator - Terralib kernel)
Função: Prover uma interface para acessar elementos de imagem de formas diferenciadas. Exemplo: TeRaster::iterator_poly. TePolygon TeRaster::iterator TeRaster::iterator_poly ?????

13 Iteradores (TeRaster::iterator - Terralib kernel)
Exemplo/Aplicação: Mosaico + Blending Iterador 1 IMAGEM A IMAGEM A Projeção A IMAGEM B IMAGEM B Projeção B Iterador 3 Imagem Resultante Projeção A

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

15 TePDI - Estrutura Hierarquia de algoritmos  Uma interface única para algoritmos.

16 Para executar um algoritmo:
TePDI - Estrutura Para executar um algoritmo: Método Reset ( TePDIParameters ) Método CheckParameters (TePDIParameters ) Método Apply()

17 TePDI - Estrutura Exemplo (contraste):
#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();

18 Como criar um novo algoritmo:
TePDI - Estrutura Como criar um novo algoritmo: Método CheckParameters (TePDIParameters ) Método ResetState() Método RunImplementation() TePDIAlgorithm TePDIMyAlgorithm CheckParameters (TePDIParameters ) ResetState() RunImplementation()

19 TePDI - Estrutura Exemplo (contraste):
#include <TePDIAlgorithm.hpp> class TePDIMyAlgorithm : public TePDIAlgorithm { public : TePDIMyAlgorithm(); ~TePDIMyAlgorithm(); bool CheckParameters( const TePDIParameters& parameters ) const; protected : void ResetState( const TePDIParameters& params ); bool RunImplementation(); };

20 TePDIAlgorithmFactory
TePDI - Estrutura Fá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. TeFactory< T > Gabarito TePDIAlgorithm TePDIAlgorithmFactory Abstrata TePDIMosaic TePDIMosaicFactory Concreta

21 TePDI - Estrutura Fá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();

22 TePDI - Estrutura Estraté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. TePDINoBlendingStrategy TePDIEuclidianBlendingStrategy TePDIGeoMosaicStrategy TePDINoBlendingStrategy TePDIMosaic TePDITieMosaic TePDIEuclidianBlendingStrategy ?????

23 TePDI - Estrutura Estratégias de algoritmos (Padrão de Projeto Strategy) TePDIStrategy TePDITieMosaicStrategy TePDIGeoMosaicStrategy ???? TePDIMosaic TePDIStrategy TePDIParameters params; params.SetParameter( “mosaic_type”, “geo_mosaic” ); TePDIAlgorithm::pointer mosaic_pointer( TePDIAlgorithmFactory::make( "TePDIMosaic", params ) );

24 TePDI - Estrutura Fábricas de estratégias de algoritmos
TeFactory< T > Gabarito TePDIStrategy TePDIStrategyFactory Abstrata TePDIGeoMosaicStrategy TePDIGeoMosaicStrategyFactory Concreta

25

26 TerraPixel Função: Plugin’s ???
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.

27 TerraPixel Arquitetura TePDI TerraLib TerraPixel Usuário Plugin

28 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.

29 TerraPixel Obtendo o código utilizando CVS:
cvs -d co aplicativos/terraPixel Raiz (CVS) aplicativos terraPixel terraPixel  Código do aplicativo Plugins  Código de plugin’s src terralibw terralibx exemplos

30 TerraPixel Arquitetura Requisito:
Portabilidade Limitações de Memória Win32 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 ).

31 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. Plugin TerraPixel 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.

32 TerraPixel Arquitetura Nem sempre é viável ( Ex: TeRaster ).
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 Plugin ObjectsManager ObjectsManager Lista Visual Algoritmo Visualização

33 ObjectsManager< T >
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

34 TerraPixel Arquitetura Resolução: Gerente de objetos TerraPixel Plugin
RastersManager(Master) RastersManager(Slave) TeSharedPtr< TeRaster > TeSharedPtr< TeRaster > TeRaster1 * TeRaster1 TeCommunicator<string> TeRaster2 TeRaster2 * TeSharedPtr< TeRaster > TeSharedPtr< TeRaster >

35 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 terraPixel plugins source base base.pro src terralibw terralibx exemplos

36 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.

37 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. ///< The plugin vendor's address. "TerraPixelPlugin" ); ///< The plugin's UUID.

38 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.

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

40 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.

41 Dúvidas ???

42


Carregar ppt "PDI em TerraLib Time TerraLib."

Apresentações semelhantes


Anúncios Google