Agosto, 2005 Introdução a TerraLib I Karine Reis Ferreira – [email protected] Gilberto Ribeiro de Queiroz – [email protected] Gilberto Câmara – [email protected] Disponível em http://www.dpi.inpe.br/cursos/ser303 O que é a TerraLib? Biblioteca de software (conjunto de classes e funções) para o domínio geográfico É um ambiente para o desenvolvimento de novos projetos de sistemas geográficos: Aplicativos Testes Geográficos de arquitetura integrada de conceitos e procedimentos É um produto para desenvolvedores de software, ou seja, programadores O que é a TerraLib? Desenvolvida em C++ : Orientação a Objeto STL (Standard Template Library) Programação genérica Padrões de projeto Multi-plataforma (windons e linux) Arquitetura Integrada- suporte para diferentes SGBDs: MySQL, PostgreSQL, PostGIS Oracle, Oracle Spatial, SQLServer, Access O que é a TerraLib? Livre e de código fonte aberto GNU Library License (or Lesser General Public License - LGPL) Parceiros de desenvolvimento Por que desenvolver a TerraLib? Novas tendências no desenvolvimento de GIS: Arquitetura Uso de SGBDs para armazenar, manipular e gerenciar dados geográficos Aplicativos integrada geográficos Transição dos atuais sistemas monolíticos para sistemas dedicados Ambiente para testes de novos conceitos A falta de tecnologia livre na área de GIS O que é o TerraView? Um Aplicativo Geográfico que utiliza a TerraLib Jfddfjh gfsdfgdfssf Jfddfjh gfsdfgdfssf Jfddfjh gfsdfgdfssf fsdf fsdfsd fsdf fsdfsd fsdf fsdfsd sdfsdf sdfsdf sdfsdf TerraLib SGBDs Site da TerraLib www.terralib.org Download da TerraLib Utilizando o aplicativo CVS (Concurrent Version System): Usuário anonymous Pegar uma versão específica ou a versão em desenvolvimento Baixar os arquivos “zipados” Estrutura de Diretórios Aplicativos desenvolvidos sobre a terralib (TerraView) …/TerraLib Exemplos de como usar a terralib (criar um layer; como importar um shape,mid/mif e raster; como criar um tema, como fazer um agrupamento) Os arquivos da terralib (classes e funções) e as bibliotecas que ela usa (shapelib, freetype, tiff, zlib) Projetos, workspaces e bibliotecas para VC++ makefiles para linux …/TerraLib …/TerraLib/src …/TerraLib/src/terralib Modelo conceitual da TerraLib Principais Conceitos: Bando de Dados TerraLib Plano de Informação ou Layer Representação geométrica Projeção cartográfica Tema Vista Visual Legenda Está representado: nas classes que compõe a biblioteca no modelo do banco de dados Banco de Dados TerraLib Repositório de dados que contém: Dados geográficos (componente espacial e alfanumérica) Metadados sobre os dados geográficos Organização em layer e temas, projeção, etc. Dados e metadados são armazenados em um modelo de banco de dados definido pela TerraLib Gerado por SGBDs: Access, MySQL, SQLServer, PostgreSQL, Oracle, PostGIS, Oracle Spatial Layer Representa uma estrutura de agregação de um conjunto de informações espaciais que são localizadas sobre uma região geográfica e compartilham um conjunto de atributos Agrega coisas semelhantes Layer dos municípios de São Paulo Layer Contém dados vetoriais ou matriciais Está associado a uma projeção cartográfica Pode ser gerado: Pela importação de arquivos em formatos de intercâmbio shapefiles, ASCII-SPRING, MID/MIF GeoTiff, JPEG Dbf ou CSV Através do resultado de uma função Manualmente Representação geométrica Representação da componente espacial do dado: Vetorial: Ponto, Linha, Polígono, Célula, Arco ou Nó Matricial Grades regulares multidimensionais Um mesmo objeto geográfico de um layer pode ter diferentes representações vetoriais Projeção cartográfica Representa a referência geográfica dos dados espaciais Permitem projetar a superfície terrestre em uma superfície plana A TerraLib suporta diferentes tipos de projeções e funções para o mapeamento entre projeções Ex: UTM (datum SAD69 ou Corrego Alegre) Mercator Polyconic LatLong Tema Define uma seleção sobre um layer baseado em restrições: Por atributo (ex.: população>300.000) Espacial (ex.: todos os municípios que são cortados pela rodovia Presidente Dutra) Temporal (ex.: todos os crimes que ocorreram no mês de janeiro) Define o visual ou a forma de apresentação gráfica da componente espacial dos objetos do tema Define grupos e legendas associadas a cada grupo Não duplica geometrias e atributos Utiliza do layer de referencia Tema Tema1 (agrupamento) Layer Tema2 (População > 70000) Tema3 (Vizinhos de São Paulo) Vista Define uma visão particular de um usuário sobre o banco de dados Agrupa os temas que serão visualizados simultaneamente Está associado a uma projeção cartográfica Visualização comum de todos os temas em uma projeção Visual Representa um conjunto de características de apresentação de primitivas geométricas: cores de preenchimento e contorno de polígonos, espessuras de contornos e linhas, cores de pontos, símbolos de pontos, etc. Legenda Caracteriza um grupo de dados, dentro de um tema, apresentados com o mesmo visual, quando os dados do tema são agrupados de alguma forma. legenda Modelo conceitual Theme SGBD Banco de Dados n 1 n n 1 Legend 1 n 1 1 Layer 1 View 1 1 1 1 projection Visual Modelo do Banco de Dados A TerraLib define um modelo de banco de dados para armazenar dados geográficos e metadados Esse modelo é formado por dois conjuntos de tabelas: Tabelas de dados: armazenam dados geográficos, sua componente espacial e alfanumérica Tabelas de metadados: armazenam o modelo conceitual da TerraLib Tabelas de Metadados Tabelas de Metadados Cada layer possui um nome, um retângulo envolvente, uma projeção e seu tempo de validade. Armazena os parâmetros de cada projeção (datum, latitude e longitude de origem, unidade, etc). Armazena informações sobre as representações geométricas de cada layer: seu tipo (ponto, linha, raster..), o nome da tabela geométrica, o retângulo envolvente, a resolução x e y e o número de linhas e colunas (para células e raster). Armazena informações sobre as tabelas de atributos associadas a cada layer (nome e o tipo da tabela, o atributo que é chave primária, o atributo de ligação com as geometrias, etc). Tabelas de Metadados Armazena informações sobre cada vista (seu nome, o nome do usuário responsável, sua projeção e se é visível ou não). Armazena informações sobre os agrupamento aplicados em cada tema (tipo de agrupamento, numero de grupos gerados, o atributos utilizado, etc). Cada tema possui um nome, uma vista associada, o layer de origem, as restrições de geração (atributo, espacial e temporal), o nome da tabela de coleção, etc. Para cada tema é criado duas tabelas de coleção para armazenar informações sobre seus objetos. Tabelas de Metadados Armazena o visual para a representação raster (tabela de lut, banda de entrada e saída, tipo de transformação, etc) Cada tema está associado a duas tabelas de coleção que contem informações sobre seus objetos (a legenda associada, se esta apontado ou consultado, etc) Armazena o visual de cada legenda para cada representação geométrica vetorial (cor e estilo de preenchimento e contorno, transparência, símbolos, etc) Armazena a legenda de cada grupo do tema (o identificador do grupo, quantos objetos existem em cada grupo, o rótulo associado e o maior e menos valor do grupo) Tabelas de Dados Geometrias e atributos são armazenados em diferentes tabelas A ligação entre essas duas tabelas é feita através da coluna “object_id” da tabela de geometria e uma coluna da tabela de atributos A coluna de ligação da tabela de atributos é armazenada na tabela de metadado te_layer_table (“attr_link”) Tabelas de geometrias: possuem formato pré-definido Tabelas de atributos: dependem dos dados, não possuem formato pré-definido Tabelas de Dados Malha_municipal 652 650 651 Polygons2 te_layer_table (metadado) Tabelas de Dados Os dados alfanuméricos são mapeados para os tipos básicos dos SGBDs: int, real, varchar, char, data A TerraLib oferece suporte para SGBDs relacionais (SGBD-R) e objeto-relacionais (SGBD-OR) Como armazenar o dado espacial nos SGBDs? Tabelas de Dados Vetoriais Como armazenar um polígono em um SGBD relacional? Alternativa 1) tabelas de pontos (x,y) Poligonos 1,5 5,5 1,1 5,1 Pol1 id num_coords num_holes pol1 4 0 pol2 12 1 Pts_pol Pontos id pt id x y pol1 1 1 1 5 pol1 2 2 5 5 pol1 3 3 5 1 pol1 4 4 1 1 pol1 5 5 1 5 Tabelas de Dados Vetoriais Como armazenar um polígono em um SGBD relacional? Alternativa 2) campo longo binário (BLOB) 1,5 5,5 Tipo BLOB 1,1 5,1 Pol1 Poligonos id num_coords num_holes poligonos pol1 4 0 (xy, xy, xy...) pol2 12 1 (xy, xy, xy...) Tabelas de Dados Vetoriais Como armazenar um polígono em um SGBD relacional? Alternativa 2) campo longo binário (BLOB) 1,5 5,5 Tipo BLOB 1,1 5,1 Pol1 Poligonos id num_coords num_holes poligonos pol1 4 0 (xy, xy, xy...) pol2 12 1 (xy, xy, xy...) A TerraLib utiliza essa alternativa!!! Tabelas de Dados Vetoriais Como armazenar dados espaciais em um SGBD-OR com extensão espacial? Estados Tipos de dados espaciais Oracle Spatial SIGLA POP MG 2222 SDO_GEOMETRY RJ 3333 Indexação espacial (RTree) SP 4444 GEOM PostGIS POLYGON, LINESTRING, POINT Indexação espacial GIST(Generalized Search Trees): B-Tree ou R-Tree Tabelas de Dados Vetoriais SGBD relacional Tabelas de Dados Vetoriais SGBD-OR com extensão Tabelas de Dados Matriciais Divisão em blocos (Tiling) Um dado matricial ou raster é dividido em blocos com largura L e altura A Cada bloco, com L x A elementos, é armazenado em um registro da tabela Vantagens: Eficiência na recuperação Flexibilidade de expansão (mosaico) Tabelas de Dados Matriciais Multi-resolução Raster pode ser armazenado em vários níveis de resolução Nível 2 Resolução R * 22 Nível 1 Resolução R * 21 Nível 0 Resolução R * 20 A aplicação “decide” qual o nível de detalhe mais apropriado e apenas os blocos com essa resolução são processados Tabelas de Dados Matriciais Indexação Cada bloco guarda as coordenadas geográficas de seu retângulo envolvente indexadas Esse retângulo é usado para selecionar apenas os blocos que interceptam uma determinada área com uma resolução apropriada Blocos possuem uma identificação única que é usada para identificá-los em um sistema de cache ou memória virtual Tabelas de Dados Matriciais Exemplo Chave primária: block_id Índices: lower_x, lower_y, upper_x, upper_y, band_id, resolution_factor Block_Id : XiYjBbRrSs Tabelas de Dados Matriciais Compressão Blocos podem ser guardados comprimidos Algoritmos de compressão Zlib JPEG: usando a biblioteca jpeglib Imagem de 1778x2804 pixels (4.985.512), 1 banda, res x e y de 25m, em blocos de 512x512: Nenhuma – 6.291.456 bytes ZLIB – 3.746.080 bytes (~59.0%) JPEG - 814.694 bytes (~12.5%) Tabelas de Dados Dado matricial - SGBD-R e SGBD-OR Associa cada objeto do layer a um raster e as características desse raster (numero de bandas, resolução x e y, numero de colunas e linhas, retângulo envolvente, etc) Armazena os metadados de cada banda do raster (valor máximo e mínimo, numero de bits, tipo de compressão, valor dummy, etc) Armazena os blocos do raster, seus retângulos envolventes, banda, tamanho, etc) Armazena valores RGB usados por raster que possuem um índice para uma tabela de lut Tabelas de atributos descritivos A TerraLib possui diferentes tipos de tabelas de atributos descritivos: Estática, Externa, Mídia Eventos e Atributos Dinâmicos (variam com o tempo) Metadado armazenado na tabela te_layer_table: attr_table_type: o tipo da tabela de atributo unique_id: o nome do atributo que identifica cada registro attr_link: o nome do atributo que faz a ligação com a geometria attr_initial_time e attr_final_time: os nomes dos atributos que possuem a data inicial e final de cada registro Tabelas de atributos descritivos Tabela Estática: Ligação direta com o objeto do layer Relacionamento 1 pra 1: um registro para cada objeto O atributo que identifica unicamente cada objeto é o mesmo que faz a ligação com a tabela de geometria. Layer Municipios MUN1 MUN2 MUN3 MUN3 Municipios (tabela estática de atributos) codigo_mun população nome_mun MUN1 34000 Santa Branca MUN2 47000 São Geraldo MUN3 10000 Dom Pedro unique_id e attr_link Tabelas de atributos descritivos Tabela Externa: Ligação indireta com o objeto do layer Relacionamento 1 pra 1 OU 1 pra N É sempre associada a uma outra tabela estática de um layer Tabelas de atributos descritivos Layer Municipios Municipios (tabela estática de atributos) codigo_mun população MUN1 MUN2 MUN3 MUN3 nome_mun MUN1 34000 Santa Branca MUN2 47000 São Geraldo MUN3 10000 Dom Pedro Hospitais - tabela externa de atributos unique_id codigo_hosp municipio num_medico HOSP1 Santa Branca 10 HOSP2 Santa Branca 12 HOSP3 São Geraldo 52 HOSP4 São Geraldo 6 HOSP5 São Geraldo 45 HOSP6 Dom Pedro 20 OBS: a tabela externa não tem uma ligação com a tabela de geometria (attr_link) e sim com uma tabela estática Tabelas de atributos descritivos Tabela Estática + Externa: codigo_mun população nome_mun codigo_hosp municipio num_medicos MUN1 34000 Santa HOSP1 Santa Branca 10 MUN1 34000 Santa HOSP2 Santa Branca 12 MUN2 47000 São Geraldo HOSP3 São Geraldo 52 MUN2 47000 São Geraldo HOSP4 São Geraldo 6 MUN2 47000 São Geraldo HOSP5 São Geraldo 45 MUN3 10000 Dom Pedro HOSP6 Dom Pedro 20 Tabelas de atributos descritivos Tabela de Mídia Faz a associação entre os objetos de um layer e as mídias armazenadas em uma outra tabela Tem um formato pré-definido media_layer_6 (tabela de mídia do layer de identificador igual a 6) attr_link unique_id media_table_6 (tabela do banco que armazena as mídias ) Tabelas de atributos descritivos Tabela de Eventos Cada evento gera um novo objeto no layer Contém os atributos de cada evento e o tempo de ocorrência (instante de tempo) Ex. Crimes de BH attr_inital_time e attr_final_time unique_id e attr_link Tabelas de atributos descritivos Tabela de Atributos Dinâmicos A geometria do objeto é fixa (não muda com o tempo) e os atributos variam com o tempo Ex. armadilhas e coletas unique_id attr_inital_time e attr_final_time attr_link Coletas