600 likes | 753 Views
Agosto, 2005. Introdução a TerraLib II. Karine Reis Ferreira – karine@dpi.inpe.br Gilberto Ribeiro de Queiroz – gribeiro@dpi.inpe.br Gilberto Câmara – gilberto@dpi.inpe.br. Disponível em http://www.dpi.inpe.br/cursos/ser303. Estrutura da TerraLib.
E N D
Agosto, 2005 Introdução a TerraLib II Karine Reis Ferreira – karine@dpi.inpe.br Gilberto Ribeiro de Queiroz – gribeiro@dpi.inpe.br Gilberto Câmara – gilberto@dpi.inpe.br Disponível em http://www.dpi.inpe.br/cursos/ser303
Estrutura da TerraLib • As principais classes e funções da TerraLib são agrupadas em 5 módulos: • Kernel • Drivers • Funções (Functions) • Algoritmos de Estatística Espaço-Temporal (Stat) • Algoritmos de Processamento de Imagens (PDI)
Kernel • Estruturas de dados • Geometrias vetoriais e raster • Ex.: TeCoord2D, TePoint, TePolygon e TeRaster • Atributos Descritivos • Ex.: TeTable, TeAttribute e TeProperty • Metadados • Ex.: TeLayer, TeTheme, TeProjection e TeLegend • Elementos espaço-temporais (atributos+geometrias+tempo) • Ex.: TeSTInstance, TeSTElement e TeSTElementSet
Kernel • API para acesso a uma base de dados TerraLib • TeDatabase e TeDatabasePortal • Algoritmos geométricos • operadores topológicos, métricos e de conjunto • Controle de visualização OBS: DPI/INPE é responsável por prover um Kernel estável, incorporando modificações e correções recomendadas por seus parceiros e usuários em geral
Kernel - Geometrias • Geometrias vetoriais TeGeometry TeVector TePoint TeLine2D TePolygon TePolygonSet TeLineSet TePointSet TeLinearRing
Kernel - Geometrias • Outras geometrias vetoriais • TeCell e TeCellSet • TeArc e TeArcSet • TeNode e TeNodeSet • TeSample e TeSampleSet • TeContourLine e TeContourLineSet • TeText e TeTextSet
Kernel - Geometrias // Cria um polígono simples TeLine2D line; line.add(TeCoord2D(900,900)); line.add(TeCoord2D(900,1000)); line.add(TeCoord2D(1000,1000)); line.add(TeCoord2D(1000,900)); line.add(TeCoord2D(900,900)) TeLinearRing r1(line); TePolygon poly1; poly1.add(r1); poly1.objectId("spoli");
Kernel - API Raster • A API Raster é formada por 3 classes básicas: • TeRaster • classe genérica • TeRasterParams • Estrutura de dados que representa os parâmetros que caracterizam um dado raster • TeDecoder • Classe genérica de decodificação de formatos e acesso a dispositivos de armazenamento
TeGeometry Kernel - API Raster • TeRaster • Manipula valores de pixel como double • Métodos getElement e setElement dão acesso ao valor escrito em cada pixel, em cada banda, em uma resolução, indexados por: (col, lin, banda,res). TeRaster::getElement(col,lin,band,val) { decoder_->getElement(col,lin,band,val ) } TeRaster::setElement(col,lin,band,val) { decoder_->setElement(col,lin,band val) }
TeGeometry Kernel - API Raster • TeRasterParams • Dimensão • Número linhas, colunas e bandas • Informações geográficas • Projeção, resolução e retângulo envolvente • Características dos elementos • Tamanho digital e interpretação • Armazenamento • Nome do arquivo ou tabela • Forma de decodificação • Mecanismo usado para ler e escrever
Kernel - API Raster • Decoders • Encapsulam o acesso aos elementos de um raster, independentemente do formato e organização • Podem ser instanciados explicitamente ou inferidos a partir de parâmetros (p.ex. extensão de um arquivo) Arquivo JPEG Dados matriciais como uma matriz de valores em memória Arquivo binários raw Dados matriciais armazenados em um banco TerraLib Arquivo TIFF ou GeoTIFF
Kernel - API Raster TeInitRasterDecoders(); // inicializa decodificadores TeRaster rasterTIF("d:/Dados/TIFF/brasM.tif"); TeRaster rasterJPEG("d:/Dados/JPEG/brasilia.jpg"); TeDatum sad69 = TeDatumFactory::make("SAD69"); TeUtm* proj = new TeUtm(sad69,-45.0*TeCDR); TeRasterParams par; par.fileName_ = "D:/Dados/RAW/grade.raw"; par.decoderIdentifier_ = "MEMMAP"; par.nBands(1); par.mode_ = 'r'; par.setDummy(-9999.9); par.setDataType(TeFLOAT); par.topLeftResolutionSize(1850.0,8200.0,10,50,10,1,true); par.projection(proj); TeRaster grade(par);
Aplicação Cache elemento bloco (i,j) ? Kernel - API Raster • Memória Virtual (cache) • Otimiza o acesso a dados raster que podem ser acessados por blocos: • Modelo raster em banco da TerraLib • GeoTIFF usando a libtiff : acesso por linha Bloco X Bloco W Decoder Bloco Y Bloco Z
Kernel - API Raster • Manipulação • ClasseTeRasterRemap: remapeia um raster de entrada para um de saída resolvendo diferenças de geometria: • Diferentes número de linhas ou colunas • Diferentes resoluções • Diferentes retângulos envolventes • Diferentes projeções
Kernel - API Raster • Manipulação • TeRasterRemap usa getElement e setElement para “copiar” um raster para outro. Exemplos: • Passar de um dispositivo para outro • Recortar um pedaço de um raster • Mosaicar vários pedaços em um raster único • Visualização • Reprojetar um raster
Kernel - Metadados • Metadados
Kernel – Elementos Espaço-Temporais • Os elementos ou objetos geográficos estão divididos em várias tabelas em um banco de dados TerraLib • Cada representação geométrica está armazenado em uma tabela • Os atributos descritivos podem estar divididos em várias tabelas de atributos • Mecanismo para recuperar de um banco TerraLib todos os elementos espaço-temporais de um layer ou tema • Querier • Estruturas para armazenar esses elementos
Kernel – Elementos Espaço-Temporais • Estruturas • TeSTInstance • representa uma instância temporal de um elemento ou objeto geográfico. Uma instância possui um tempo e um conjunto de atributos e geometrias válido para esse tempo • TeSTElement • representa todas as instâncias temporais de um determinado elemento • TeSTElementSet • representa todas as instâncias temporais de todos os elementos espaciais pertencentes a um tema
Arm1 Arm2 Kernel – Elementos Espaço-Temporais • Estruturas • Ex.: armadilhas TeSTInstance TeSTElement TeSTElementSet
Kernel – Elementos Espaço-Temporais • Estruturas
Kernel – Elementos Espaço-Temporais • Mecanismo de recuperação: TeQuerier • Recupera instâncias espaço-temporais a partir de diferentes fontes (banco TerraLib ou shapefile) • É construído a partir de um conjunto de parâmetro • TeQuerierParams • Pode ser construído usando diferentes estratégias. Uma estratégia é escolhida internamente baseado nos parâmetros de construção • TeQuerierDBStr1 • TeQuerierDBStr2 • TeQuerierDBStr3
Kernel: Algoritmos geométricos • Operações topológicas • Baseado na Matriz 9-I DE • Ex.: TeEquals, TeDisjoint, TeTouches, TeCrosses • Operações métricas • Ex.: TeDistance, TeLength, TeGeometryArea • Operações de conjunto • Ex.: TeUnion, TeIntersection e TeDifference • Outras operações • Ex.: TeFindCentroid, TeBufferRegion
Kernel - API para acesso a banco TerraLib • Classe abstrataTeDatabase • Interface completa de manipulação do banco TerraLib • Define métodos para inserir, alterar, excluir e recuperar as entidades do modelo conceitual e os dados geográficos • Classe abstrataTeDatabasePortal • Implementa o conceito de portal: submete uma consulta SQL ao banco e disponibiliza os registros resultantes • Um portal e sempre criado a partir de uma instância da classe TeDatabase que possui uma conexão aberta com o banco
Postgre SQL Oracle SqlServer MySQL Oracle Spatial PostGIS Kernel - API para acesso a banco TerraLib • Database e Drivers Kernel Drivers DBMS
Drivers • As classes TeDatabase e TeDatabasePortal são derivadas em classes concretas chamadas drivers • Cada driver implementa os métodos abstratos conforme as características e particularidades de cada SGBD • Os drivers para SGBD-OR com extensão espacial exploram todos os recursos fornecidos para tratar dados geográficos • Tipos de dados espaciais • Indexação espacial • Operadores e funções juntamente com SQl
Drivers • Diferenças no modelo de banco de dados TerraLib Driver Driver Oracle Spatial DBMS Without spatial extent Oracle Spatial
P Drivers • Diferentes implementações dos métodos do Database • Ex.: LocatePolygon Qual o polígono que contém o ponto P?
Drivers • LocatePolygon: SGBD sem extensão espacial TerraLib Driver SELECT * FROM polygons p WHERE p.lower_x <= P.x() AND p.upper_x >= P.x() AND p.lower_y <= P.y() AND p.upper_y >= P.y() DBMS Without spatial extent
Drivers • LocatePolygon: SGBD sem extensão espacial TerraLib TerraLib functions Driver result SELECT * FROM polygons p WHERE p.lower_x <= P.x() AND p.upper_x >= P.x() AND p.lower_y <= P.y() AND p.upper_y >= P.y() DBMS Without spatial extent
Drivers • LocatePolygon: SGBD com extensão espacial TerraLib Driver Oracle Spatial SELECT * FROM polygons WHERE MDSYS.SDO_RELATE(spatial_data, MDSYS.SDO_GEOMETRY(2001, NULL, MDSYS.SDO_POINT_TYPE(P.x(),P.y(), NULL), NULL, NULL), 'mask=contains querytype = window') = 'TRUE'"; result Oracle Spatial
Functions • Importação de dados vetoriais • MID/MIF, SPRING geo/tab, shapefile, BNA, DBF, CSV • Exportação de dados vetoriais • MID/MIF, ASCII SPRING, shapefile • Geração de um layer de células a partir de um layer ou tema • Cálculo de estatísticas de células • Address Locator • Processamento geográficos entre temas • Agregação, Adição, Interseção, União, Diferença, Associação de atributos (coleta ou distribuição) • Criação de temas ou layers a partir de temas
TeDecoderVirtualMemory TeDecoderVirtualMemory getElement(c,l,b,val,res) setElement(c,l,b,val,res) brasilia.tif -> rIn TeDecoderTiff TeRasterRemap remap(); remap.setInput(rIn); remap.setOutpu(rOut); remap.apply() TeDecoderDatabase getRasterBlock(blockId,...) putRasterBlock(blockId,...) getRasterBlock(blockId,...) rOut Importação de dados matriciais
Stat • Projeto TerraStat: Algoritmos de estatística espaço-temporal • Média Local, Índice de Moran Local e Global, G e GStar • Mapa de Kernel • Semivariograma • Bayes Empírico Local e Global • Skater • Função K e KNox • Sistema de Vigilância • LESTE-UFMG (Laboratório de Estatísticas Espaciais da Universidade Federal de Minas Gerais)
PDI • Algoritmos para processamento de imagens • Funções de contraste • Filtros e filtros de convolução • Algoritmos de classificação • Crescimento de regiões • DPI/INPE
Aplicativos e Projetos • Aplicativos • TerraView • TerraCrime • Sistema do Proarco • SigMun • Projetos • SAUDAVEL • TerraStat • Integração com R (aRT e MyR) • TDK e VIPE
SigMun • Funcate • www.funcate.org.br/geoprocessamento.html • Construção de aplicativos para atualização, consulta e navegação na base de dados georeferenciada • Implementações • São Sebastião, Ilhabela, Ubatuba, Caraguatatuba, São José dos Campos • São Bernardo do Campo, Santos, Cachoeiro do Itapemirim • Mirasol, Avaré, Feira de Santana, Estado da Bahia – Geopolis (50)
Projeto SAUDAVEL • Tecnologias da Informação Espacial no Apoio ao Controle Epidêmico • Experimento em andamento em Recife-PE • Alimentando um banco de dados TerraLib • Visualização e consulta via TerraView
Projeto TerraStat • Biblioteca de procedimentos estatísticos espaciais avançados em C++ • Parceria INPE/DPI e UFMG Leste TerraStat: (Algoritmos TerraLib) é um conjunto de algoritmos para clusters espaço-temporais através de métodos estatísticos e outras soluções, implementadas em C++ e a incoporados como algoritmos em TerraLib
Integração com R: GCEA - UFPR • Grupo de Estatística Computacional e Espacial Aplicadas • http://www.est.ufpr.br/GECEA • aRT (API R-TerraLib) : integração entre o software R e TerraLib combinando informações estatísticas e geoespaciais • myR : biblioteca C++ para acessar funcionalidades R
Projeto TDK e VIPE • TecGraf-PUC/Rio • InfoPae (Petrobrás) • Planos de emergência para refinarias • TDK: TerraLib Development Kit • Objetivo: facilitar o desenvolvimento de aplicativos geográficos que utilizem a TerraLib • WMS-TerraLib • VIPE : ferramenta de visualização, impressão, processamento e edição a partir de um banco de dados TerraLib
Programando com TerraLib • Diretório “examples”
Criar um banco TerraLib // Datatabase server parameters string host = "localhost"; string dbname = "TerraTeste"; string user = "root"; string password = ""; // Creates a new database TeDatabase* db = new TeMySQL(); if (!db->newDatabase(dbname, user, password, host)) { return 1; } // Close database db->close(); return 0;