MINISTÉRIO DA DEFESA
EXÉRCITO BRASILEIRO
DEPARTAMENTO DE CIÊNCIA E TECNOLOGIA
INSTITUTO MILITAR DE ENGENHARIA
CURSO DE GRADUAÇÃO EM ENGENHARIA CARTOGRÁFICA
AL DIEGO BENINCASA FERNANDES CAVALCANTI DE ALMEIDA
AL VANDRO FERNANDES MORGADO
IMPLEMENTAÇÃO DE UM ALGORITMO COMPUTACIONAL EM CÓDIGO
ABERTO PARA MANIPULAÇÃO DA BASE CARTOGRÁFICA NACIONAL
RIO DE JANEIRO
2007
2
INSTITUTO MILITAR DE ENGENHARIA
AL DIEGO BENINCASA FERNANDES CAVALCANTI DE ALMEIDA
AL VANDRO FERNANDES MORGADO
IMPLEMENTAÇÃO DE UM ALGORITMO COMPUTACIONAL EM CÓDIGO
ABERTO PARA MANIPULAÇÃO DA BASE CARTOGRÁFICA NACIONAL
Iniciação à Pesquisa apresentada ao Curso de Graduação em Engenharia Cartográfica no Instituto Militar de Engenharia, como requisito parcial para a obtenção do título de Graduado em Engenharia Cartográfica.
Orientador: Cap QEM Ermírio de Siqueira Coutinho – M.C.
Rio de Janeiro
2007
3
INSTITUTO MILITAR DE ENGENHARIA
AL DIEGO BENINCASA FERNANDES CAVALCANTI DE ALMEIDA
AL VANDRO FERNANDES MORGADO
IMPLEMENTAÇÃO DE UM ALGORITMO COMPUTACIONAL EM CÓDIGO
ABERTO PARA MANIPULAÇÃO DA BASE CARTOGRÁFICA NACIONAL
Iniciação à Pesquisa apresentada ao Curso de Graduação em Engenharia Cartográfica no Instituto Militar de Engenharia, como requisito parcial para a obtenção do título de Graduado em Engenharia Cartográfica.
Orientador: Cap QEM Ermírio de Siqueira Coutinho – M.C.
Aprovada em __ de _______ de 2007 pela seguinte Banca Examinadora:
______________________________________________________________________ Cap QEM Ermírio de Siqueira Coutinho – M.C.
______________________________________________________________________ Cap QEM Vagner Braga Nunes Coelho - M.C.
______________________________________________________________________ Cap QEM Marcos de Meneses Rocha – M.C.
______________________________________________________________________ 1º Ten QEM Ivanildo Barbosa – Eng. Cart.
Rio de Janeiro
2007
4
SUMÁRIO
LISTA DE SIGLAS E ABREVIATURAS .......................................................................... 06
LISTA DE ILUSTRAÇÕES ................................................................................................. 07
RESUMO ............................................................................................................................... 08
ABSTRACT ........................................................................................................................... 09
1 INTRODUÇÃO ......................................................................................................... 10
1.1 OBJETIVO .................................................................................................................. 11
1.2 MOTIVAÇÃO ............................................................................................................. 11
1.3 ESTRUTURAÇÃO DO TRABALHO ........................................................................ 12
2 FUNDAMENTAÇÃO TEÓRICA ............................................................................ 13
2.1 SISTEMAS DE INFORMAÇÕES GEOGRÁFICAS (SIG) ....................................... 13
2.1.1 INTRODUÇÃO ........................................................................................................... 13
2.1.2 CONCEITUAÇÃO ...................................................................................................... 14
2.1.3 DADOS EM SIG ......................................................................................................... 15
2.2 OPENGIS E ISO/TC 211 ............................................................................................ 15
2.3 TIPOS DE DADOS UTILIZADOS EM CARTOGRAFIA DIGITAL ....................... 16
2.4 TERRALIB .................................................................................................................. 16
2.5 TERRAVIEW .............................................................................................................. 18
2.6 O CAD E O MICROSTATION .................................................................................. 20
2.7 SISTEMA GERENCIADOR DE BANCO DE DADOS (SGBD) .............................. 21
2.8 ESTRUTURA DE ARMAZENAMENTO DOS ARQUIVOS ................................... 22
2.8.1 ESTRUTURA DO ARQUIVO DESIGN FILE ........................................................... 22
2.8.2 ESTRUTURA DO ARQUIVO SHAPEFILE .............................................................. 24
2.9 BIBLIOTECAS GDAL/OGR DE LEITURA E ESCRITA DE ARQUIVOS DESIGN
FILE E SHAPEFILE ............................................................................................................... 26
3 EQUIPAMENTOS E MÉTODOS UTILIZADOS NA PESQUISA ..................... 27
5
4 DESENVOLVIMENTO ............................................................................................ 28
4.1 REDIRECIONAMENTO DO OBJETIVO ................................................................. 28
4.2 LEITURA DOS DIVERSOS TIPOS DE ARQUIVO PELA OGR ............................ 29
4.2.1 LEITURA DO ARQUIVO DESIGN FILE ATRAVÉS DA OGR .............................. 29
4.2.2 LEITURA DO ARQUIVO SHAPEFILE POR MEIO DA OGR ................................ 30
4.3 CÓDIGO EXISTENTE DE CONVERSÃO DO DESIGN FILE PARA
SHAPEFILE ............................................................................................................................ 31
5 ANÁLISE DOS RESULTADOS .............................................................................. 35
6 CONCLUSÕES .......................................................................................................... 37
7 SUGESTÕES PARA TRABALHOS FUTUROS ................................................... 38
8 REFERÊNCIAS BIBLIOGRÁFICAS .................................................................... 39
ANEXO I – CÓDIGO-FONTE DO PROGRAMA DGNTOSHP ..................................... 41
ANEXO II – CÓDIGO-FONTE DO PROGRAMA DGNTOPG ...................................... 46
6
LISTA DE SIGLAS E ABREVIATURAS
BD Banco de Dados
BDG Banco de Dados Geográficos
C2 Sistema de Comando e Controle
DCT Departamento de Ciência e Tecnologia
DGN Design File
DPI/INPE Divisão de Processamento de Imagens do Instituto Nacional de Pesquisas
Espaciais
DSG Diretoria de Serviço Geográfico
EB Exército Brasileiro
ESRI Environmental Systems Research Institute
Funcate Fundação de Ciência, Aplicações e Tecnologia Espaciais
GC2 Grupo de Comando e Controle
GDAL Geospatial Data Abstraction Library
GIS Geographic Information Systems
GRASS Geographic Resources Analysis Support System
IBGE Instituto Brasileiro de Geografia e Estatística
IME Instituto Militar de Engenharia
ISFF Intergraph’s Standard File Formats
LBS Location Based Services
OGC Open Geospatial Consortium
PBCT Plano Básico de Ciência e Tecnologia
PUC-RIO Pontifícia Universidade Católica do Rio de Janeiro
QGIS Quantum GIS
SGBD Sistema de Gerenciamento de Bancos de Dados
SIG Sistema de Informações Geográficas
SQL Structured Query Language
TBCD Tabela da Base Cartográfica Digital
Tecgraf Grupo de Tecnologia em Computação Gráfica da PUC-RIO
7
LISTA DE ILUSTRAÇÕES
Fig. 2.1 Ambiente gráfico do TerraView 3.0.3 para Linux, em execução .................... 19
Fig. 2.2 Ambiente gráfico do MicroStation SE (Windows XP) .................................... 21
Fig. 5.1 Ambiente gráfico do Quantum GIS 0.8.0 para Linux ...................................... 35
8
RESUMO
Este trabalho tem por finalidade pesquisar uma possível implementação de uma alternativa ao uso de programas licenciados para a leitura de arquivos .DGN, nativo do programa MicroStation, proprietário da Bentley, no qual encontra-se codificado quase a totalidade do mapeamento sistemático brasileiro. O objetivo é realizar a exportação dos dados vetoriais armazenados neste arquivo para um formato de arquivo aberto e livre, possível de ser lido em plataformas SIG gratuitas. Tal pesquisa está incluída num contexto de trabalhos realizados pelo Grupo de Comando e Controle (GC2) do Departamento de Ciência e Tecnologia (DCT) do Exército Brasileiro.
9
ABSTRACT
This research has the main purpose of looking forward for some possible way of estabilishing an alternative to the use of licensed softwares to read .DGN files, Bentley MicroStation’s native file format, in wich is coded almost all the systematic mapping of the Brazilian territory. The main objective is to exportate data stored in those files to some open- -source, free file format, readable in open-source GIS platforms. This research is part of a context of works realized by the Grupo de Comando e Controle (GC2) of Departamento de Ciência e Tecnologia (DCT) of Brazilian Army.
10
1 INTRODUÇÃO
O Departamento de Ciência e Tecnologia (DCT), órgão de direção setorial do Exército
Brasileiro (EB), é uma instituição que tem por objetivos principais desenvolver e apoiar
projetos de aprimoramento científico-tecnológico do EB, além de promover a formação de
recursos humanos capazes de realizar tal tarefa. Dentro deste contexto, e tendo em vista a
situação econômica do país, que não permite grandes gastos, o DCT, por meio do Plano
Básico de Ciência e Tecnologia (PBCT), deu início a onze projetos tecnológicos,
denominados grupos finalísticos, onde cada um tem uma missão bem definida, visando obter
ao seu final um produto de emprego militar considerado prioritário pelo Exército.
O Grupo de Comando e Controle (GC2) é um dos grupos finalísticos, tendo por
finalidade unir esforços empregados até então em projetos que estavam sendo desenvolvidos
de modo paralelo, adotando a filosofia de software livre para suas tarefas (o que diminui as
despesas de projeto). Tal medida trará grande economia para a Força Terrestre, pois não será
mais necessário o pagamento de licenças de uso de produtos e softwares desenvolvidos por
empresas privadas, além de passar à instituição o controle não só dos dados, como também da
manipulação dos mesmos, o que significa a independência total de outras instituições no que
diz respeito à esta manipulação.
O projeto do Sistema de Comando e Controle (C2) envolve atividades de
desenvolvimento em algumas áreas distintas do conhecimento como, por exemplo, Sistemas
de Comunicações e desenvolvimento de equipamentos, dentre outros. Dentre essas áreas, uma
das de maior importância é a de Sistemas de Informações Geográficas (SIG), que permite
visualização e análises espaciais sobre o terreno onde se desenvolvem as operações que serão
acompanhadas pelo sistema de C2. Sendo assim, foi criado um subgrupo de desenvolvimento
de SIG no âmbito do GC2. Esse grupo visa desenvolver um SIG para uso não só pelo C2,
como também por outros órgãos da Força Terrestre, empregando a filosofia de software livre.
A adoção de tal filosofia objetiva solucionar um problema atualmente enfrentado pelos órgãos
responsáveis pelo mapeamento sistemático do território brasileiro (a Diretoria de Serviço
Geográfico do Exército – DSG, e o Instituto Brasileiro de Geografia e Estatística – IBGE) que
é a dependência de aplicativos proprietários para visualização, geração e atualização de dados.
Atualmente, quase a totalidade do mapeamento digital brasileiro encontra-se feito por um
aplicativo proprietário, o Bentley® MicroStation. Desta forma, todo e qualquer tipo de uso
11
dos arquivos digitais requer uma licença do produtor do software, o que demanda um alto
custo e a dependência tecnológica. Além disso, o uso de programas de código fechado limita
o uso destas plataformas em casos muito específicos, pois os recursos disponíveis em cada
software são pré-estabelecidos pelo fabricante, e a incorporação de novas ferramentas
depende da disponibilidade técnica e financeira deste, bem como das limitações de suas
linguagens de extensão.
1.1 OBJETIVO
Como a maior parte do mapeamento sistemático do Brasil foi feito com uso de um
aplicativo comercial, os dados encontram-se codificados em arquivos de formato proprietário,
dificultando ou até mesmo impedindo seu correto uso em outras plataformas. Tendo-se isto,
uma das atividades previstas pelo subgrupo de SIG é a de utilizar um algoritmo que permita
decodificar esse arquivo proprietário, elucidando como o mesmo se encontra estruturado,
permitindo assim que os dados do mapeamento sistemático, pertencentes à Nação Brasileira e
não às empresas que desenvolveram os aplicativos nos quais eles foram produzidos, possam
ser utilizados de forma independente dessas plataformas. Um desses usos seria a sua edição
ou visualização por aplicativos de distribuição livre e código aberto (open-source), permitindo
assim a democratização do acesso a dados geográficos e a ampliação das possibilidades
relativas à sua manipulação.
No intuito de cooperar com os projetos existentes na área de Comando e Controle,
procurar-se-á, com este trabalho de pesquisa, novas formas de acesso às informações contidas
nos arquivos de formato proprietário nos quais encontram-se os dados do mapeamento
sistemático brasileiro, formas estas de livre distribuição (gratuitas) e de código aberto, o que,
por conseqüência, ainda contribui com a isenção da necessidade de uso de softwares
licenciados para manipulação destes mesmos dados, diminuindo os custos de trabalho.
1.2 MOTIVAÇÃO
O Exército Brasileiro, como já mencionado, possui diversos trabalhos na área de
Comando e Controle. Tais projetos têm, por meta principal, reduzir custos excessivos, dada a
situação econômica que o Brasil vive. Assim, visando colaborar para o desenvolvimento do
país de forma ativa, bem como permitir o total domínio sobre o uso e manipulação dos dados,
12
em meio digital, do mapeamento sistemático brasileiro, deu-se início a este trabalho de
pesquisa, que está intimamente ligado às diretrizes estabelecidas pelas pesquisas em
andamento já existentes na área de Comando e Controle.
1.3 ESTRUTURAÇÃO DO TRABALHO
O presente trabalho está estruturado em capítulos, da forma como segue detalhado.
O Capítulo 2 trata da fundamentação teórica, onde os conceitos fundamentais ao
desenvolvimento do trabalho são apresentados.
O Capítulo 3 apresenta os equipamentos e métodos necessários à execução do trabalho.
O Capítulo 4 apresenta o desenvolvimento do trabalho propriamente dito.
O Capítulo 5 trata da análise dos resultados obtidos com a conversão.
O Capítulo 6 dispõe sobre as conclusões que se pôde obter após a realização do trabalho.
O Capítulo 7 apresenta sugestões para trabalhos futuros que possam, utilizando os
resultados obtidos neste trabalho, dar continuidade ao mesmo.
O Capítulo 8 lista as referências bibliográficas que auxiliaram na realização deste
trabalho.
13
2 FUNDAMENTAÇÃO TEÓRICA
2.1 SISTEMAS DE INFORMAÇÕES GEOGRÁFICAS (SIG)
2.1.1 INTRODUÇÃO
Os primeiros estudos e conseqüentes SIG são da década de 60, e apesar de não receberem
esta denominação à época, levavam o conceito nos mais diversos campos de aplicações.
Sistemas como Computer-Aided Drafting and Design (CADD), Land Information System
(LIS), Multipurpose Cadastre e Automed Mapping (AM)/ Facilities Management (FM), entre
outros, levavam em comum a habilidade de manipular informações de caráter geográfico.
Desde as décadas de 60, estudos sobre SIG foram desenvolvidos paralelamente a Cartografia
em países como Estados Unidos, Canadá e Inglaterra. Nas décadas de 70 e 80, houve um
avanço na área computacional, o que fez com que os custos na produção de memória e
hardware diminuíssem, alavancando o crescimento dos SIG. Nesta mesma época, foram
laçados equipamentos que se somaram ao SIG (tais como “plotters” vetoriais e monitores de
vídeo coloridos), o que pôde revelar o poder desta ferramenta. Já no inicio da década de 80, o
Sistema ArcInfo da Enviroment Systems Research Institute (ESRI) foi lançado, sendo um dos
primeiros softwares de SIG a possuir um sistema de gerenciamento de banco de dados, fato
este que representou um avanço importante na área de SIG.
2.1.2 CONCEITUAÇÃO
Existem diversas definições para SIG. Algumas delas serão abordadas por serem de
autores e/ou pesquisadores renomados em estudos referentes à esta tecnologia.
Um SIG é definido como “qualquer conjunto de procedimentos manuais ou baseados em
computador usados para armazenar e manipular dados geograficamente referenciados”
(ARONOFF, 1989).
Ainda como definição de SIG, tem-se a que segue.
14
Um arranjo de equipamento computacional, software, e dados geográficos que
as pessoas interagem para integrar, analisar, e visualizar os dados; identificar
relacionamentos, padrões e tendências; e encontrar soluções para problemas. O
sistema é projetado para capturar, armazenar, atualizar, manipular, analisar, e
apresentar a informação geográfica. Um SIG é tipicamente usado para representar
mapas como camadas de dados que podem ser estudadas e usadas para fazer
análises. (ESRI-GIS Dictionary, 2006)
MAGUIRE (1991) reconhece em um SIG, a “capacidade de apresentação cartográfica de
informações complexas, uma sofisticada base integrada de objetos espaciais e de seus
atributos ou dados, e um engenho analítico formado por um conjunto de procedimentos e
ferramentas para análise espacial”.
A informação se armazena e se usa em uma base de dados geográficos, que combina
dados geométricos, posicionais e temáticos. Cada tema de informação é representado por um
nível (chamado também de camada ou, mais comumente, layer), que nada mais é do que um
conjunto de objetos elementares de mesma natureza. Um nível reúne uma representação
cartográfica de objetos espaciais que está ligada a uma tabela de informações sobre estes
objetos. Num arquivo matricial (raster), as informações armazenadas são representadas
visualmente por uma matriz de pixels, e quando em um arquivo vetorial, por objetos como
pontos, linhas ou polígonos.
O SIG permite cruzar informações de uma base de dados de diferentes formas. Seja por
características geométricas e temáticas dos objetos, que permitem seleções de subconjuntos a
partir de atributos estatísticos, ou de seleções denominados espaciais, provenientes de
ferramentas gráficas.
2.1.3 DADOS EM SIG
A tecnologia dos SIG mais modernos é relativamente recente, surgindo no princípio dos
anos 80. Em sua primeira geração, estes sistemas estavam muito ligados à geração de projetos
independentes visando o cumprimento de tarefas específicas de empresas particulares, sendo
praticamente sistemas CAD com a capacidade de representar projeções cartográficas e
associar atributos a objetos espaciais. A segunda geração, desenvolvida na década de 90, foi
concebida para o uso cliente-servidor, implantados sobre Sistemas de Gerenciamento de
15
Banco de Dados (SGBD) para armazenamento de seus dados tabulares, complementada com
pacotes adicionais para o tratamento de imagens. São os sistemas mais utilizados hoje em dia.
Os Bancos de Dados Geográficos (BDG) apareceram como a terceira geração de SIG,
caracterizadas pela gestão de grandes bases de dados geográficas, onde tantos dados tabulares
(alfanuméricos) quanto geométricos são armazenados em SGBD, com acesso por meio de
redes locais e remotas, e com interfaces por meio da internet.
2.2 OPENGIS E ISO/TC 211
O Open Geospatial Consortium (OGC™) é uma organização sem fins lucrativos, criada
em 1994 e dedicada à criação de padrões para serviços baseados em localização (LBS –
Location Based Services) e para manipulação de dados geoespaciais. Foi fundado pelas mais
importantes empresas privadas produtoras de aplicativos de geoprocessamento, órgãos
governamentais e acadêmicos. Seu objetivo é a padronização de serviços e formatos para
intercâmbio de dados entre diferentes sistemas de geoprocessamento (SIG, sensoriamento
remoto, etc.), ou seja, visa permitir a interoperabilidade entre diferentes SIG.
Na busca por esta padronização, surge a especificação OpenGIS, que define a
representação de formas geométricas básicas e os principais métodos para acessá-las, criando
uma interface padrão para manipulação e intercâmbio de dados de SIG. “A especificação do
padrão é feita em dois níveis: Abstract Specifications e Implementation Specifications. “A
finalidade do primeiro é criar e documentar um modelo conceitual suficiente o bastante para
permitir a criação do segundo” (OGC, 1999). As Abstracts Specifications definem a forma de
simbolização e representação de feições, enquanto as Implementation Specifications regem o
modo com que estas representações serão realizadas em meio digital.
Além da especificação OpenGIS, a ISO também possui um comitê permanente para
especificações nas áreas de Informações Geográficas e Geomática: o ISO/TC 211 (Technical
Committee - Geographic Information/Geomatics), sendo que “o OGC está alinhado com o
ISO/TC 211. Essas organizações têm desenvolvido um acordo de cooperação para
harmonização de seus trabalhos mútuos e desenvolvimentos futuros” (BRODEUR et al,
2000).
16
2.3 TIPOS DE DADOS UTILIZADOS EM CARTOGRAFIA DIGITAL
Basicamente, há dois tipos de fontes de informação utilizados em um SIG: as fontes
matriciais (carta digitalizada em scanner, imagens de sensores orbitais, fotografias aéreas,
imageamento radar, etc.) e as fontes vetoriais (cartas digitalizadas em mesa digitalizadora, por
exemplo).
As fontes matriciais de dados cartográficos constituem-se de dados digitalizados por
simples cópia (scanner) ou de imagens obtidas diretamente do terreno, com ou sem
processamento. Estas imagens são representadas, em ambiente computacional, por uma
matriz de pontos (pixels), onde a cada um deles é atribuído um valor numérico relativo a uma
escala de cores (RGB, CMY, YUV, etc.) ou a uma escala radiométrica (tons de cinza). Tais
dados são de uso mais trabalhoso em SIG, pois não tratam isoladamente as feições do terreno
e, por isso, não favorecem a seleção de áreas específicas para conexão a um banco de dados,
visto que imagens matriciais (mais comumente conhecidas como imagens raster) permitem
apenas a seleção pixel a pixel. A maior dificuldade na caracterização de uma feição
armazenada como raster é a definição dos seus limites, não existindo comercialmente ainda
um software que execute esta tarefa de modo preciso.
Já as fontes vetoriais de dados cartográficos são aquelas onde as feições do terreno são
representadas computacionalmente por vetores. Através da digitalização de cartas impressas,
por exemplo, pode-se armazenar pontos, linhas e polígonos representativos de feições no
terreno. Desta forma, o acesso a informações geográficas contidas em um banco de dados
torna-se facilitado, pois a seleção de linhas e de polígonos, em computador, é mais facilmente
realizada. Para efeito de comparação, pode-se dizer que a seleção de apenas um objeto (forma
geométrica definida por vetores), de certa forma, significaria a seleção de um grande número
de pixels, o que demonstra a maior facilidade de manipulação de dados vetoriais.
2.4 TERRALIB
Atualmente, as grandes aplicações SIG são desenvolvidas por empresas privadas. Desta
forma, todo tipo de dado inserido em um banco de dados geográficos está subjugado às
rotinas de armazenamento e leitura dos desenvolvedores destas aplicações, de tal forma que
não se pode ter a posse total e irrestrita dos dados efetivamente usados no SIG. Ou seja,
17
apesar de se possuir a informação, a leitura da mesma só é possível adquirindo-se uma licença
do software onde foi desenvolvido.
Para a utilização de um SIG usando plataformas proprietárias, torna-se necessário a
aquisição de licenças de uso dos aplicativos, fato que, via de regra, gera grandes custos, dado
tratarem-se de produtos de alta tecnologia e de aplicação muito específica, além da pequena
concorrência nesses nichos de mercado. O fator custo tem sido o principal motivador da nova
tendência mundial de uso do software livre, ou seja, de programas computacionais que
permitem acesso ao seu código-fonte e que podem ser usados e copiados livremente.
Seguindo a vertente de uso do software livre, foi desenvolvido pela DPI (Divisão de
Processamento de Imagens) no INPE (Instituto Nacional de Pesquisas Espaciais), pela
Tecgraf (Grupo de Tecnologia em Computação Gráfica da Pontifícia Universidade Católica
do Rio de Janeiro – PUC-RIO) e pela Funcate (Fundação de Ciência, Aplicações e Tecnologia
Espaciais), um conjunto de bibliotecas e rotinas de manipulação de Banco de Dados
Geográficos (BDG) e SIG, o TerraLib, distribuído como software livre e com código aberto,
ou seja, disponível para qualquer interessado em uma solução gratuita para SIG e com
interesse em desenvolver novas ferramentas de manipulação de dados geográficos. Tal projeto
está sendo amplamente desenvolvido, e constantes melhorias são realizadas com o objetivo de
se criar uma plataforma de SIG totalmente independente dos formatos proprietários e com os
principais métodos e funcionalidades já disponíveis em plataformas proprietárias consagradas
de SIG, como o ArcGIS e de CAD, como o MicroStation, por exemplo.
A grande motivação por trás do projeto de desenvolvimento do TerraLib é o fato de não
existir atualmente uma ferramenta versátil de SIG, ou seja, adaptável às novas tecnologias que
surgem diariamente. Com plataformas proprietárias, o usuário fica dependente da vontade do
fabricante de atualizar seus softwares, e nem sempre esta atualização vai de encontro às suas
necessidades. Com o projeto de código aberto do TerraLib, torna-se possível o
desenvolvimento de rotinas particulares, de forma a atender a um dado projeto, além de
permitir uma atualização e melhoria nos códigos-fonte de forma mais rápida, pois não há
custos adicionais de manutenção muito elevados e toda a comunidade de usuários pode
participar. Isto porque qualquer pessoa pode fazer esta melhoria a qualquer tempo, sem ficar
presa às limitações de uma empresa privada, além do fato de que estas alterações podem ser
submetidas para apreciação dos responsáveis pela distribuição do aplicativo de código aberto.
Outra idéia básica por trás do TerraLib é a atual tendência no avanço das tecnologias de
Sistemas de Gerenciamento de Bancos de Dados (SGBD) capazes de manipular dados
18
espaciais. Em outras palavras, os novos e futuros formatos de bancos de dados permitem não
apenas o armazenamento de dados tabulares, relativos às feições ou geometrias (população,
número de empresas privadas, tipo e cor de linha utilizado para uma certa representação, etc.),
como também da própria representação geométrica dos mesmos. Este novo paradigma em
SIG permite o armazenamento conjunto de todos os dados relativos a cada feição,
simplificando a modelagem do sistema e tornando-o, muitas vezes, mais eficiente.
O TerraLib é uma biblioteca de funções escrita em C++, uma conhecida e amplamente
utilizada linguagem de programação orientada a objetos. Seu projeto foi desenvolvido de
modo a permitir sua compilação multiplataforma – Windows e Linux –, e permite ainda o
desenvolvimento de diversas aplicações de SIG distintas baseadas em suas funções
Uma das características de maior destaque da TerraLib é a sua “capacidade de se conectar
à sistemas de gerenciamento de banco de dados objeto-relacionais (SGBD-OR) para
armazenar dados geográficos, tanto sua componente descritiva quanto sua componente
espacial” (CASANOVA, et al, 2005). Como a TerraLib está na camada existente entre o
banco de dados e o aplicativo final e é desenvolvido em código aberto, ele torna possível o
compartilhamento de dados existentes em diferentes bancos de dados.
2.5 TERRAVIEW
Dentre as plataformas de visualização e manipulação de dados geográficos baseados na
biblioteca TerraLib, merece destaque a TerraView. Desenvolvida pelo DPI/INPE, o
TerraView é um SIG capaz de visualizar dados geográficos e fazer consultas e análises sobre
estes dados, que estão armazenados em bancos de dados geridos por um SGBD, tais como
Oracle, MySQL, PostgreSQL e Access, servindo como prova de conceito da TerraLib e como
exemplo de aplicativo desenvolvido sobre ela.
O TerraView possui, entre outros recursos, a capacidade de importar arquivos vetoriais
de algumas outras plataformas SIG, a saber:
• MID/MIF – Formato de intercâmbio do software MAPInfo, constituído por dois
arquivos. O arquivo .mid contém os atributos, enquanto o arquivo .mif contém as
geometrias do mapa.
• Shapefile – Formato de intercâmbio de produtos da ESRI. É constituído por três
arquivos de mesmo nome, mas com extensões .shp (shapefile – armazena as
19
geometrias referentes ao terreno), .dbf (database file – contém o banco de dados, ou
seja, contém os atributos das geometrias armazenadas no .shp) e .shx (shapefile index
– contém uma lista de índices relativos ao .shp, permitindo a correta conexão entre o
banco de dados e as geometrias correspondentes).
• Tab/Geo – Formato de exportação de dados do software SPRING (Sistema de
Processamento de Informações Georeferenciadas), desenvolvido pelo INPE e
gratuito. É formado por dois arquivos de mesmo nome, porém com extensões .geo e
.tab, um contendo as geometrias e outro contendo o banco de dados acerca dos
objetos armazenados.
• BNA (Boundary File Format) – Formato de exportação de arquivo usado no software
Atlas GIS, da ESRI. Possui apenas três tipos de dados: ponto, linha e/ou área.
Uma vez importados os dados para dentro do TerraView, uma série de consultas e
análises pode ser realizada sobre o mapa, como pode ser parcialmente visto na Fig. 2.1. Na
verdade a importação consiste da conversão dos arquivos originais para seu subseqüente
armazenamento em banco de dados. Esse banco de dados segue um esquema de
armazenamento próprio conhecido como Modelo de Dados TerraLib. Tais procedimentos
estão bem detalhados no tutorial do software, disponível no site do programa em
www.dpi.inpe.br/terraview .
Fig. 2.1 – Ambiente gráfico do TerraView 3.0.3 para Linux, em execução.
20
2.6 CAD (COMPUTER-AIDED DESIGN) E O MICROSTATION
Nos diversos ramos da engenharia, é comum a necessidade de se fazer desenhos e
modelagens digitais de formas e de objetos reais. Na construção civil, por exemplo, é de
grande utilidade a criação de plantas e de maquetes digitais de edificações, pois isto permite
que se faça medições de modo mais rápido e mais preciso antes mesmo de se conceber
fisicamente a construção. Em Cartografia, usa-se, por exemplo, muito os recursos
computacionais para se criar modelos digitais de relevo para fins de estudo da superfície da
Terra, sem a necessidade da efetiva presença no local de estudo.
Para que tais concepções bidimensionais e tridimensionais pudessem ser realizadas em
ambiente computacional, foi desenvolvido o CAD – Computer Aided Design, ou Projeto
Auxiliado por Computador –, aplicativo que visa facilitar o projeto e o desenho técnicos. Uma
plataforma CAD consiste de várias ferramentas capazes de desenhar e modificar entidades
geométricas planas – ponto, linha e área – e figuras tridimensionais. Além disso, pode dispor
de ferramentas de relacionamento entre essas entidades ou essas figuras 3D, tais como:
arredondar junção de linhas, subtrair formas de figuras 3D e obter uma terceira, etc..
As plataformas CAD, apesar de serem utilizadas por um grupo muito grande de usuários,
são sistemas computacionais caros e altamente especializados, que costumam também exigir
maiores recursos computacionais. Além disso, a falta de software livre na área de CAD tem
sido um dos maiores empecilhos a uma maior popularização desta ferramenta, o que restringe
ainda mais a utilização de sistemas CAD a um grupo cada vez menor de pessoas.
Na área da Engenharia Cartográfica, para o mapeamento sistemático do território
nacional realizado pelo IBGE e pela DSG tem-se utilizado o software MicroStation, da
Intergraph®. Originalmente criado pela Bentley Systems em 1980, esse software, mostrado
na Fig. 2.2, foi o utilizado na digitalização e produção de cartas do território brasileiro. Assim,
grande parte da base vetorial cartográfica do Brasil se encontra arquivada no formato .DGN
(“DesiGN file”), que é um formato proprietário da Intergraph® e que necessita da aquisição
de uma licença para sua manipulação (edição e visualização dos dados no programa original).
O MicroStation, apesar de salvar seus arquivos no formato .DGN, permite ainda a leitura
e a importação de outros formatos de arquivos vetoriais, como o .DXF e o .DWG (do
Autodesk® AutoCAD). Permite ainda que se dê uma saída em diversos formatos de natureza
diferente, tanto em forma de imagem (arquivo matricial) como em forma de animação.
21
Fig. 2.2 – Ambiente gráfico do MicroStation SE (Windows XP).
2.7 SISTEMA DE GERENCIAMENTO DE BANCOS DE DADOS (SGBD)
Em geral, um banco de dados (BD) pode ser visto de diferentes formas. De um ponto de
vista sistemático, pode ser considerado como um conjunto de dados que possuem algum tipo
de relacionamento. Já do ponto de vista de gerenciamento de informações, pode ser
considerado como um conjunto de dados que modelam uma certa atividade empresarial, ou
que atendem a um determinado fim.
Mesmo sendo dois pontos de vista distintos, as duas interpretações possuem
características em comum, tais como:
− Funções para descrever, pesquisar e atualizar o BD.
− Interfaces que facilitam o acesso às informações do BD e que permitem a
independência do tipo de equipamento utilizado.
− Melhor entendimento das propriedades estáticas e dinâmicas dos dados armazenados.
22
Tendo isso em mente, foi criado o conceito de SGBD. Um SGBD, como o próprio nome
diz, nada mais é do que o sistema que gerencia os dados de um BD, ou seja, é o responsável
por oferecer descrição e manipulação facilitada dos dados armazenados, interfaces de acesso
aos dados totalmente independente da estrutura computacional utilizada e um conjunto de
ferramentas que provêem um bom entendimento da aplicação computacional de interesse
modelada.
Para ser considerado um SGBD, o sistema deve ser capaz de atender a alguns objetivos,
tais como: separação dos processos de descrição e de manipulação dos dados, processamento
eficiente das operações de BD, facilitação das atividades de administração e controle dos
dados, mínima redundância e mínimo espaço de armazenamento, possibilidade de
compartilhamento dos dados, garantia de segurança e integridade das informações, etc.
Atualmente, existem diversos SGBD disponíveis. Dentre os mais utilizados, pode-se citar
o MySQL, o PostgreSQL, o Oracle, o ACCESS e o dBASE.
Dentre os SGBD, destaca-se o PostgreSQL, pois este está totalmente capacitado para se
adaptar às diretrizes estabelecidas pelo OGC. Isto porque já existe uma extensão desenvolvida
para o mesmo totalmente de acordo com as especificações OpenGIS. Esta extensão,
denominada PostGIS, habilita o PostgreSQL a trabalhar com o armazenamento de geometrias,
além de possuir funções de análise e processamento dos dados armazenados, transformando o
BD em mais uma fonte de armazenamento de dados para SIG e permitindo o uso dos mesmos
em diferentes aplicativos de SIG.
2.8 ESTRUTURA DE ARMAZENAMENTO DOS ARQUIVOS
2.8.1 ESTRUTURA DO ARQUIVO DESIGN FILE (.DGN)
O formato de arquivo .DGN é um dos formatos definidos pela ISFF (Intergraph Standard
File Formats), criada nos anos 80 pela Intergraph, antiga proprietária do sistema CAD
MicroStation. A ISFF compreende os tipos de arquivos comuns ao MicroStation e à
Intergraph's Interactive Graphics Design System (IGDS). A documentação da ISFF está
disponível ao público no Guia do Usuário do MicroStation (além de disponível em diversas
fontes na internet, como em http://dgnlib.maptools.org/dl/ref18.pdf), o que possibilita o
23
desenvolvimento de aplicações que lêem e escrevem nos tipos de arquivos definidos na ISFF
sem a necessidade de se obter uma licença para isso.
Em geral, os arquivos .DGN são arquivos binários com registros de tamanho variável, o
que por conseqüência gera arquivos de tamanho também variável. Dentro deste arquivo, há
alguns tipos de registros, alguns destes de existência e tamanho obrigatórios. Tais registros
são:
− Design File Header (cabeçalho do arquivo)
− Informações de configuração do arquivo
− Elementos gráficos
− Dados não gráficos.
Arquivos .DGN permitem dois tipos básicos de elementos gráficos: os primitivos e os
complexos. Os elementos primitivos são as linhas, as polilinhas, as curvas fechadas, as
elipses, os arcos, os textos e os cones. Já os elementos complexos são aqueles construídos por
uma combinação ou união de elementos primitivos distintos, criando uma forma única com
tipo não definido. A este último grupo de elementos inclui-se as superfícies, os sólidos e as
splines.
Os registros dos elementos complexos possuem constituição diferenciada. O seu
cabeçalho possui informação sobre cada um de seus constituintes, o que inclui o número total
de elementos formadores da geometria e alguns dados acerca do tamanho dos dados destes.
Outro recurso do arquivo .DGN é a possibilidade de separação das informações em
diferentes camadas (ou layers, como são mais chamadas), o que facilita a visualização, o
estudo e a classificação de dados digitalizados. Tal recurso é amplamente utilizado nos
processos de construção da base cartográfica nacional pela DSG, que inclusive estabelece
(por meio do manual T34-700 – Manual Técnico de Convenções Cartográficas, e da TBCD –
Tabela da Base Cartográfica Digital) a regra geral de classificação dos dados em diferentes
camadas.
De uma forma geral, o formato .DGN é bastante versátil, pois permite o armazenamento
de diversos tipos de geometrias, desde as mais simples até formas bastante complexas, e sua
separação em diferentes layers. Além disso, permite a personalização de diversas
características das geometrias, como tipo, cor e peso das linhas, por exemplo. Tais
funcionalidades fizeram do MicroStation o programa mais utilizado na vetorização de cartas
pelos órgãos nacionais da Cartografia. Contudo, apesar das facilidades, seu uso gera custos,
24
pois se trata de um programa proprietário e que exige o pagamento de uma licença de uso
para edição dos dados.
Diversas outras características peculiares definem o tipo de arquivo .DGN. Todas estas
características estão mais detalhadamente descritas no Guia do Usuário do MicroStation,
disponível, como já mencionado anteriormente, na internet, em
http://dgnlib.maptools.org/dl/ref18.pdf .
2.8.2 ESTRUTURA DO ARQUIVO SHAPEFILE
O formato de arquivo shapefile foi desenvolvido pela ESRI. É reconhecido por inúmeras
plataformas de SIG e outros programas de desenho vetorial, pois a própria ESRI disponibiliza
na internet um manual com toda a estrutura do arquivo shapefile, o que permite a criação de
aplicações computacionais capazes de ler e escrever arquivos deste tipo.
O formato shapefile é consituído, na verdade, por três arquivos distintos, cada um sendo
responsável pelo armazenamento de parte da informação.
a) Arquivo principal – .shp
Este arquivo é responsável por armazenar todo o conjunto de geometrias. É um arquivo
binário e suporta três tipos básicos de formas geométricas: ponto, linha e área.
Por ser um arquivo binário, é composto por um conjunto de registros, cada um contendo
um cabeçalho, que contém o número do registro e o tamanho computacional do mesmo, e a
relação dos vértices formadores deste elemento.
O arquivo .shp possui um cabeçalho de tamanho fixo, responsável por armazenar
informações gerais a respeito de si próprio (tamanho do arquivo, bounding box, tipo de
geometria armazenada, versão e código do arquivo).
Uma restrição que ainda existe no shapefile é a de que um arquivo .shp só pode conter
geometrias do mesmo tipo. Desta forma, não é possível, por exemplo, armazenar num mesmo
.shp formas do tipo linha e polígono, sendo necessário, se for o caso, a separação destes tipos
de dados em arquivos diferentes.
Outra impossibilidade do shapefile é a de não ser possível a separação dos dados em
diferentes camadas (layers), tal qual o design file da Bentley. Contudo, se for o caso de ser
necessário classificar os dados em diferentes subgrupos, há alternativas, como a separação dos
25
mesmos em diferentes arquivos .shp e com nomes de arquivo facilmente reconhecíveis.
Assim, pode-se importar tais arquivos com facilidade para a plataforma SIG a ser utilizada.
Quanto à codificação de bytes nos cabeçalhos existentes no arquivo .shp, toda ela está
mais detalhadamente descrita no manual da ESRI, não cabendo aqui maiores detalhes por não
ser objeto direto de estudo deste trabalho de pesquisa.
b) Arquivo de banco de dados (.dbf)
Este arquivo é responsável por guardar os atributos correspondentes às geometrias
armazenadas no .shp. É um banco de dados dBASE, no qual a tabela de atributos está
estruturada de forma a conter um registro por atributo. A correta relação entre o atributo e a
geometria está garantida pelo fato de a ordem dos registros de atributos no banco de dados ser
a mesma ordem dos registros das geometrias no arquivo .shp.
Qualquer tipo de atributo desejado pode ser armazenado no arquivo .dbf, desde que seja
obedecida a ordem de armazenamento já descrita anteriormente. Para a construção e
manipulação deste arquivo, existem inúmeras aplicações disponíveis no mercado, dado que
este formato de arquivo é bem conhecido e antigo, o que facilita o seu manuseio. E
exatamente por isso, foi o tipo de banco de dados primeiramente selecionado pela ESRI para
armazenar os atributos, pois facilita a sua leitura em aplicações que irão trabalhar com o tipo
shapefile.
c) Arquivo de índices (.shx)
Este arquivo tem como finalidade principal permitir o acesso direto às informações de
uma dada geometria armazenada no .shp (e seus correspondentes atributos armazenados no
.dbf), sem a necessidade de se percorrer toda a lista de registros deste arquivo. Tal
procedimento agiliza a recuperação de informações, o que pode ser de grande utilidade, caso
a otimização do tempo gasto no processamento destas informações seja um ponto importante
no desenvolvimento de um dado projeto ou de um estudo.
Tal qual os outros dois tipos de arquivo já descritos, o arquivo .shx também é binário.
Possui um cabeçalho semelhante ao do .shp, e cada registro armazena informações
relacionadas ao tamanho dos registros guardados no .shp. São tais informações que permitem
o acesso direto ao registro desejado, quando da consulta por dados ou atributos relativos a
uma dada geometria de interesse.
26
2.9 BIBLIOTECAS GDAL/OGR DE LEITURA E ESCRITA DE ARQUIVOS DESIGN
FILE E SHAPEFILE
A GDAL (Geospatial Data Abstraction Library) é uma biblioteca computacional gratuita
e em código aberto para leitura e conversão de arquivos do tipo raster. Suporta uma vasta
gama de tipos de arquivo comuns nas áreas de geociências, e por isso é utilizada na maioria
das aplicações nesta área. Para fins de exemplificação, alguns dos aplicativos mais conhecidos
que a utilizam são: ESRI® ArcGIS 9.2+, Google® Earth, GRASS, UMN MapServer,
OpenEV e Quantus GIS (QGIS).
Paralelamente ao projeto da GDAL, vem se desenvolvendo um outro projeto que visa
criar funcionalidades semelhantes à da GDAL, porém para dados vetoriais. Este projeto foi
chamado de OGR, cuja sigla não tem significado definido (a explicação de sua origem leva
em consideração informações que exigem a aquisição de maiores conhecimentos, e por tal
fato não ser relevante para a execução deste trabalho, foi deixado em segundo plano). Tal
projeto também se constitui de um conjunto de bibliotecas capazes de interpretar diversos
tipos de arquivos vetoriais comumente empregados em SIG, além de prover ferramentas de
manipulação dos mesmos e de conversão entre formatos reconhecidos pela OGR.
Entre os formatos vetoriais de interesse deste trabalho que a OGR consegue reconhecer,
encontram-se o shapefile da ESRI, o design file V7 da Intergraph (como estabelecido na
ISFF) e o banco de dados PostgreSQL com extensão PostGIS (como estabelecido na OGC).
Contudo, apesar de ser possível ler estes arquivos e converter entre um e outro formato, a
biblioteca possui limitações, de forma que estas precisam ser avaliadas e contornadas para que
se atinja o objetivo deste trabalho de pesquisa.
O principal motivo da utilização da GDAL/OGR neste trabalho é o fato de ela conseguir
ler o arquivo .DGN, e devido à sua capacidade de conversão para outros formatos, pode-se
fazer a tradução deste formato para outro qualquer suportado pela biblioteca. Para este
trabalho, contudo, será estudado o método de conversão para shapefile e para
PostgreSQL/PostGIS, bem como suas limitações, seus sucessos e suas falhas. Mais
informações sobre o motivo do estudo de ambos os tipos de conversão serão detalhados mais
adiante.
27
3 EQUIPAMENTOS E MÉTODOS UTILIZADOS NA PESQUISA
Para a execução dos estudos acerca da implementação de um código computacional que
cumpra o objetivo estabelecido neste trabalho, alguns recursos se tornam necessários,
principalmente – mas não exclusivamente – recursos computacionais.
Sabe-se que, no intuito de diminuir gastos excessivos com licenças de programas, e
aliando-se à atual linha das pesquisas já existentes na área de SIG, o ideal, para conclusão do
trabalho, é obter bibliotecas e softwares para o sistema operacional Linux, pois todos os
recursos necessários estão disponíveis para esta plataforma. Desta forma, procurou-se utilizar
somente bibliotecas computacionais e softwares livres, atendendo aos objetivos de diminuição
de custos operacionais e acessibilidade irrestrita aos dados geográficos.
Quanto à parte computacional, os principais recursos, todos para o sistema Linux (a
menos que estejam discriminados), foram:
− Computadores com sistemas operacionais Linux (Kurumin 7.0), para execução dos
testes e elaboração de relatórios.
− Software para desenvolvimento de aplicações computacionais em linguagem C++ –
KDevelop 3.4.1.
− Software licenciado para criação/edição/visualização de arquivos .DGN – Bentley®
MicroStation 95 (Microsoft® Windows), disponível na Seção de Engenharia
Cartográfica do Instituto Militar de Engenharia.
− Plataforma SIG gratuita e em código aberto para visualização dos arquivos
convertidos – TerraView 3.1.4, Quantum GIS 0.8.0.
− Bibliotecas gratuitas e em código aberto para leitura/escrita de arquivos shapefile e
.DGN e para conversão entre estes formatos – GDAL 1.4.0, TerraLib 3.1.4.
− SGBD para Linux – PostgreSQL 8.2.4
− Cartas vetorizadas armazenadas em formato .DGN para serem utilizadas nos testes a
serem implementados.
28
4 DESENVOLVIMENTO
4.1 REDIRECIONAMENTO DO OBJETIVO
O formato shapefile foi primeiramente selecionado para a conversão por ser um tipo de
arquivo reconhecido por inúmeras plataformas SIG, dentre elas o TerraView, utilizado no
Exército Brasileiro como base para o aplicativo de SIG que está sendo desenvolvido pelo
GC2/PBCT. Isto proporcionaria uma facilidade de adaptação dos diversos órgãos do Exército
que se utilizam de SIG à uma possível nova aplicação livre para leitura de arquivos .DGN.
Entretanto, com a atual tendência de se estabelecer uma interoperabilidade entre
plataformas SIG, notadamente pelo crescimento e difusão do padrão OpenGIS, será realizado,
em contrapartida, a conversão do arquivo .DGN para um Banco de Dados Geográficos (BDG)
no formato PostgreSQL. Este tipo de banco de dados foi o selecionado por ser capaz de
atender à especificação OpenGIS e por ser reconhecido pela biblioteca OGR.
O redirecionamento do objetivo também levou em consideração a já existência de uma
rotina computacional, também baseada na OGR, para conversão entre .DGN e shapefile.
Assim, baseando-se no trabalho existente, procurou-se adaptá-lo às necessidades desta
pesquisa. Este método de trabalho também foi preferido pela exigüidade de tempo para
conclusão do mesmo, o que dificultou uma exploração mais ampla das possibilidades desta
rotina a ser desenvolvida.
Um fato que colaborou para a não utilização do TerraView foi detectado durante a fase de
análise dos resultados. Ao se abrir um banco de dados PostgreSQL/PostGIS no TerraView,
este automaticamente insere tabelas próprias dele no banco de dados, de forma que o acesso
ao mesmo fica restrito somente ao TerraView. Assim, o objetivo de se criar uma fonte de
dados multiplataforma foi perdido, pois o banco de dados PostGIS de antes passou a ser um
banco de dados TerraLib, reconhecível somente pela biblioteca TerraLib, restringindo seu
uso.
29
4.2 LEITURA DOS DIVERSOS TIPOS DE ARQUIVO PELA OGR
4.2.1 LEITURA DO ARQUIVO DESIGN FILE POR MEIO DA OGR
Sabe-se que a biblioteca OGR é capaz de ler arquivos .DGN, apesar de não conseguir
escrever neste tipo de arquivo. Contudo, como o objetivo deste trabalho é realizar a conversão
deste formato para outro de interesse, liberando o acesso às informações salvaguardadas em
arquivos proprietários, tal limitação não é empecilho ao prosseguimento da pesquisa.
A OGR, através das funções computacionais disponibilizadas na sub-rotina DGNLib,
consegue, com algumas limitações, ler os dados do arquivo .DGN, mas apenas aqueles
criados até a versão V7 do MicroStation (inclusive), utilizados até o ano 2000 na plataforma
CAD da Intergraph. Isto se deve ao fato de que a versão V7, ao contrário das posteriores a ela,
possui documentação sobre a sua estrutura interna, tornando mais fácil a sua leitura por
aplicativos livres. Os formatos mais novos são praticamente ilegíveis, visto que há a
necessidade de se descobrir como é a estrutura interna dos arquivos, o que certamente
demanda trabalhos extensos.
Apesar de não haver perda de informações, o arranjo das mesmas é modificado ao se
visualizar o arquivo pela OGR. As modificações ocorridas são:
− Todas as camadas (layers) existentes no arquivo original são reunidas em uma única
camada chamada elements;
− Não há georreferenciamento do arquivo .dgn através da OGR;
− Todo e qualquer tipo de geometria é convertido para os tipos ponto, linha ou
polígono, havendo com isso a perda do conceito de elemento complexo, a saber:
− Tipo polilinha – tratado como linha multi-segmentada;
− Tipo área – tratado como polígono;
− Tipo curva – aproximado para geometria linear;
− Tipo b-spline – aproximado, com perda de precisão, para o tipo de geometria
linear;
− Tipo arco – aproximado para geometria linear;
− Tipo elipse – aproximado para geometria linear;
− Tipo texto – aproximado para geometria pontual.
− O padrão de preenchimento de objetos não é suportado pela OGR, embora o
preenchimento com cor sólida seja.
30
Conhecidas estas limitações, pode-se realizar algumas medidas para tentar contorná-las,
visando uma futura conversão do arquivo .DGN para shapefile. Uma delas consiste em salvar
cada camada de dados em um arquivo .DGN separado, evitando assim que se perca a
classificação das informações já realizada quando da digitalização da carta.
4.2.2 LEITURA DO ARQUIVO SHAPEFILE POR MEIO DA OGR
O suporte a leitura e criação de arquivos shapefile é bastante desenvolvida na OGR. Toda
a manipulação deste tipo de arquivo é função de uma sub-rotina, a ShapeLib.
Um diretório contendo diversos arquivos .SHP é tratado como sendo um conjunto de
dados (dataset) com múltiplos layers, sendo cada layer representado por um shapefile.
Outra característica de relevância no suporte a arquivos .SHP é a possibilidade de se
anexar informações quanto à projeção cartográfica utilizada na carta. Basta que se coloque, no
diretório acima mencionado, o arquivo .PRJ (do Arc/Info ou do ESRI OGC WKT) referente
às características da projeção.
Por não ser a ferramenta padrão para leitura e escrita de arquivos .SHP, a OGR apresenta
um certo número de limitações, principalmente no que diz respeito à criação de arquivos
novos. Algumas limitações importantes de serem ressaltadas são:
− Nomes de atributos armazenados no arquivo .dbf tem um tamanho máximo de doze
caracteres, e nomes de comprimento maior do que isso são truncados, o que pode
fazer com que hajam informações repetidas no banco de dados, gerando problemas
posteriores;
− No banco de dados (.dbf), o tamanho do campo do atributo e a sua precisão são
diretamente utilizados no estabelecimento do tamanho de armazenamento do arquivo;
com isso, strings mais longas do que o tamanho máximo permitido ou números que
não caibam no espaço permitido a eles são truncados;
− Campos do tipo inteiro no arquivo .dbf sem comprimento definido são interpretados
como sendo de comprimento onze;
− Campos do tipo real (floating point) no arquivo .dbf sem comprimento definido são
interpretados como sendo de comprimento vinte e quatro, com quinze casas decimais
de precisão;
31
− Campos do tipo string no arquivo .dbf sem comprimento definido são interpretados
como sendo de comprimento oitenta.
− A OGR permite a reescrita de geometrias, bem como a remoção delas, embora o
processo de remoção dos atributos correspondentes não seja realizado no arquivo
.dbf; o atributo a ser removido no banco de dados é marcado para remoção e então
ignorado pela OGR, de forma que para concluir a remoção (se desejado) é necessário
a execução de um comando de banco de dados (dependendo da aplicação que se
utiliza da OGR, este comando pode já estar embutido no código do programa).
Como se pôde perceber, algumas das limitações existentes precisam ser contornadas para
que se possa estabelecer a OGR como biblioteca padrão a ser utilizada na conversão de dados
vetoriais da base cartográfica nacional. Estas limitações são, em sua maioria, relativas aos
atributos associados às geometrias e não às geometrias em si. Assim, pela disponibilidade de
tempo para a execução do presente trabalho, que dificulta a aquisição de maiores
conhecimentos a respeito de algumas das limitações existentes na OGR, apenas algumas delas
merecerão destaque especial e serão estudadas mais a fundo, a fim de se evitar a perda de
informações de maior relevância com a conversão.
4.3 CÓDIGO EXISTENTE DE CONVERSÃO DO DESIGN FILE PARA SHAPEFILE
No sentido de prover a comunidade cartográfica de uma base de dados livre e possível de
ser manipulada por softwares gratuitos, foi desenvolvida na 5ª Divisão de Levantamento
(5ª DL), no Rio de Janeiro-RJ, uma rotina de conversão dos dados contidos no arquivo .DGN
para o formato shapefile. Tal rotina (doravante denomidada “dgntoshp”), de autoria do 1º Ten
Maurício Carvalho Mathias de Paulo, atualmente no 5º ano de Engenharia Cartográfica do
Instituto Militar de Engenharia (IME), manipula diretamente as bibliotecas GDAL/OGR,
trabalhando com as funções nela definidas e estruturadas. Desta forma, e diferentemente do
binário “ogr2ogr” disponibilizado pela própria comunidade desenvolvedora da GDAL, o
“dgntoshp” consegue realizar toda a separação dos layers do arquivo .DGN, bem como
manter toda a informação original juntamente com seus atributos, dentro, logicamente, das
limitações impostas pela própria estrutura do arquivo shapefile (um tipo de geometria por
arquivo .SHP, apenas três possibilidades de geometria, etc.).
32
A biblioteca GDAL/OGR, como informa sua documentação, consegue converter dados
entre alguns dos formatos que é capaz de reconhecer, sendo os de interesse de momento os
seguintes:
− ESRI Shapefile
− DGN
− PostgreSQL
Para que a conversão seja realizada, é necessário passar para a função da OGR que
processa a conversão o módulo a ser utilizado. Um módulo (comumente chamado de driver),
para a OGR, nada mais é do que um conjunto de instruções específicas para a leitura/escrita
de um dado tipo de arquivo. Cada um dos drivers disponíveis na OGR recebe um nome da
forma como exemplificado acima, de acordo com o tipo de arquivo suportado por ele, e é
exatamente este nome que é utilizado para realizar a conexão entre o módulo e as funções
conversoras desejadas.
A seguir encontra-se um trecho do código do dgntoshp, mais especificamente do código
contido no arquivo cdgntoshp.cpp . Pode-se ver aqui como a referência ao driver “ESRI
Shapefile” é feita.
int cdgntoshp::createshpdir(string dir)
{
const char *pszDriverName = "ESRI Shapefile";
this->outDriver = OGRSFDriverRegistrar::GetRegistrar()-> GetDriverByName
( pszDriverName );
if( this->outDriver == NULL )
{
cout << pszDriverName << " driver not available." <<endl;
return( 0 );
}
this->dds = this->outDriver->CreateDataSource( dir.c_str(), NULL );
if( this->dds == NULL )
{
cout << "Creation of output file failed." << endl; ;
return( 0 );
}
return 1;
}
33
Como se pode perceber, o driver é informado ao programa, que o armazena na string
“pszDriverName”. Esta variável, posteriormente, é utilizada como parâmetro em outra função
da OGR, responsável por recuperar as funções a serem utilizadas na manipulação do arquivo
shapefile.
Logicamente, há mais a ser feito, mas já se pode perceber que este trecho de código
precisa ser alterado para que o “dgntoshp” passe a utilizar o driver “PostgreSQL” em vez do
“ESRI Shapefile”. Contudo, a passagem de instruções ao driver “PostgreSQL” é diferente do
driver do shapefile, visto que PostgreSQL é um banco de dados e não um arquivo. Sendo
assim, os parâmetros de conexão ao banco de dados precisam ser passados ao driver, a saber:
− Endereço do servidor;
− Nome do banco de dados a ser utilizado;
− Usuário (username);
− Senha (password).
Estudando a documentação da GDAL/OGR e analisando o código do “dgntoshp”,
chegou-se à conclusão de que a passagem destas informações se dá de um modo um pouco
diferente do modo do “dgntoshp”. O primeiro fato percebido é que, como a OGR só é capaz
de acrescentar tabelas a um banco de dados existente e não é capaz de criar um banco de
dados novo, a função CreateDataSource não poderá ser utilizada. Isto porque esta função é a
responsável por criar o arquivo de saída, e neste caso o “arquivo” seria um banco de dados.
Desta forma, a seguinte linha de código do arquivo cdgntoshp.cpp
this->dds = this->outDriver->CreateDataSource( dir.c_str(), NULL );
se transformará em
this->dds = OGRSFDriverRegistrar::Open( dir.c_str(), FALSE );
A função Open recebe como parâmetro principal (dir) os dados para conexão ao banco de
dados, sendo a responsável por abrir o mesmo para inserção das geometrias.
No arquivo dgntoshp.cpp, referente ao programa principal, alguns trechos do código
também precisam ser alterados, notadamente ao que se refere aos parâmetros passados ao
executável após compilado. Desta forma, o trecho de código
34
string entryfile=argv[1];
string outdir=argv[2];
será alterado para
string entryfile=argv[1];
string outdir="PG: host=";
outdir+=argv[2]; //host
outdir+=" dbname=";
outdir+=argv[3]; //dbname
outdir+=" user=";
outdir+=argv[4]; //user
outdir+=" password=";
outdir+=argv[5]; //password
sendo que o programa principal será executado da seguinte forma:
$ ./dgntopg origem.dgn servidor nomedobanco usuario senha
onde:
- servidor – endereço do servidor do banco de dados;
- nomedobanco – banco que receberá as geometrias;
- usuario – nome do usuário dono do banco de dados “nomedobanco”;
- senha – senha do usuário “usuario”.
Outras pequenas modificações do código do “dgntoshp” foram realizadas, modificações
estas relacionadas à particularidades dos formatos shapefile e PostgreSQL. Ambos os códigos
encontram-se em anexo ao trabalho, sendo tais modificações comentadas no formato C++ em
momento oportuno.
Após realizadas as modificações necessárias, todo o código foi recompilado, gerando-se
o arquivo binário “dgntopg”, pronto para ser executado.
35
5 ANÁLISE DOS RESULTADOS
Partindo-se de uma carta do IBGE em formato .DGN, executou-se o programa “dgntopg”
exatamente como descrito anteriormente. Logo em sua execução, pôde-se perceber que o
mesmo funcionou, gerando tabelas e inserindo-as no local correto no banco de dados.
Tendo-se os dados importados para o banco de dados, fez-se a visualização dos mesmos
através do software Quantum GIS (QGIS). Uma vez aberto o programa, selecionou-se a
ferramenta “Adicionar camada PostGIS”, e em seguida criou-se uma nova conexão com os
mesmos parâmetros utilizados na execução do “dgntopg”. Feito isto, conectou-se ao banco, de
forma que o QGIS reconheceu cada um dos diversos níveis do arquivo .DGN original como
sendo uma tabela distinta dentro do banco de dados utilizado. Adicionando-se tais tabelas ao
projeto do QGIS, pôde-se visualizar os dados, conforme pode ser visto na Fig. 5.1.
Fig. 5.1 – Ambiente gráfico do Quantum GIS 0.8.0 para Linux.
36
A principal incongruência observada entre os dados convertidos e o arquivo .DGN
original diz respeito à tabela de cores. O arquivo .DGN V7 carrega consigo um valor
numérico de cor para os objetos, de forma que quando o arquivo é aberto no MicroStation a
tabela de cores faz a tradução do valor numérico para a cor adequada. O problema reside no
fato de que o PostgreSQL não guarda tabelas de cores, sendo isto de responsabilidade da
plataforma manipuladora e visualizadora dos dados vetoriais (no caso, o QGIS). Assim,
devido ao fato de o QGIS atribuir cores aleatórias aos objetos de cada layer PostGIS (como
informa a documentação do software), as cores apresentadas na tela do programa não
correspondem àquelas apresentadas no MicroStation. Contudo, é possível de se realizar a
adaptação desta tabela, pois o QGIS oferece ferramentas de edição de tabela de cores,
cabendo ao usuário atribuir a cor que lhe convém ao valor numérico de cor do dado
armazenado no banco de dados.
Outro problema observado, este ainda na fase de conversão, foi a impossibilidade de se
converter algumas geometrias por motivo desconhecido. Durante a execução do “dgntopg”,
foram apresentadas as falhas, conforme pode ser visto na Fig. 7.1. Tais problemas
provavelmente são por falha na implementação o programa, pois os mesmos tipos de
geometria que apresentaram falha durante a conversão de um dado arquivo puderam ser
convertidos sem problemas em alguns outros arquivos.
Através do programa “dgntoshp”, “todos os dados relevantes (isto é, geometrias e seus
atributos) não são perdidos” (UCHÔA, et al, 2006), sendo os dados totalmente corretos e
válidos. Como já foi dito em outra oportunidade, o tempo disponível para execução da
pesquisa não permitiu o estudo dos demais problemas que talvez sejam gerados pelo processo
de conversão e/ou de visualização, bem como não foi possível um estudo de meios de
contorná-los. Contudo, cabem pesquisas detalhadas em cima dos dados convertidos para o
banco de dados, de forma a se poder estabelecer, com segurança nos resultados, o conjunto
OGR/PostgreSQL/PostGIS/QGIS como padrão para edição e visualização da base
cartográfica nacional.
37
6 CONCLUSÕES
O conjunto de bibliotecas GDAL/OGR é uma biblioteca completa, dispondo de inúmeras
ferramentas para reconhecimento de vários formatos de arquivos privados. Para o objetivo
deste trabalho, mostrou-se muito útil, pois foi capaz de realizar com sucesso a leitura do
arquivo .DGN e posteriormente exportar os dados para um banco de dados PostGIS.
Os dados cartográficos, antes codificados dentro da estrutura desconhecida do arquivo
.DGN, puderam ser convertidas para um formato de dados aberto e gratuito. Embora não se
tenha podido analisar profundamente as possíveis incorreções nos dados finais, em primeira
mão a rotina computacional mostrou-se de grande valia, pois certamente servirá de impulso à
execução de demais trabalhos voltados para a disponibilização das informações do
mapeamento sistemático brasileiro, cuja posse e domínio deve ser integralmente da Nação
Brasileira e não estar sujeita ao pagamento de licenças a empresas privadas para se ter acesso
às tais informações.
38
7 SUGESTÕES PARA TRABALHOS FUTUROS
Além da idéia citada nas conclusões do trabalho (pesquisar por mais falhas na conversão
do .DGN para PostgreSQL/PostGIS), uma possível proposta de trabalho futuro é a
implementação de uma padronização de uma tabela de cores a partir dos valores RGB no
banco de dados. Isto porque, como foi visto durante a análise dos resultados da conversão, a
tabela do .DGN é exclusiva do MicroStation, não sendo armazenada no banco de dados após
a conversão do arquivo, fazendo com que se perca a relação número x cor que se tinha no
MicroStation. Apesar do número relativo à cor ser armazenado, este não tem a mesma
correspondência de cores em outros softwares como o Quantum GIS. Assim, visando a
padronização do formato aberto e livre para SIG, o estudo de uma possível implementação de
uma tabela de cores no padrão da TBCD para o QGIS torna-se viável.
39
8 REFERÊNCIAS BIBLIOGRÁFICAS
ANTENUCCI, J. C., BROWN, K., CROSWELL, P. L., et al. Geografique Information
Systems: A guide to the tecnology. Van Nostrand Reinhold, 1991. ARONOFF, S. Geographic Information Systems: A Management Perspective. Canada:
WDL Publications, 1989. BRODEUR, J. et al.. Modelling Geospatial Application Databases using UML-based
Repositories Aligned with International Standards in Geomatics. In Proceedings of
Eighth ACM Symposium on Advances in Geographic Information Systems (ACMGIS).
Washington - D.C., 2000. CASANOVA, M., CÂMARA, G., DAVIS, C., VINHAS, L., QUEIROZ, G. M. Banco de
Dados Geográficos. Curitiba: MundoGEO, 2005. DE PAULO, M. C. M.. CONVERSOR DGNTOSHP. Rio de Janeiro, 2006. Conjunto de
programas. 1 CD-ROM ENVIRONMENT SYSTEMS RESEARCH INSTITUTE. Understanding GIS: The
ARC/INFO Method. Redlands, CA: Environment Systems Research Institute, 1991. ESRI SHAPEFILE TECHNICAL DESCRIPTION. Environmental Systems Research
Institute Inc., 1998 [online]. Disponível: http://shapelib.maptools.org/dl/shapefile.pdf [capturado em 09 mar. 2007].
ESRI-GIS DICTIONARY. ESRI Support Center [online]. Disponível:
http://support.esri.com/GISDictionary [capturado em 26 out. 2006]. GARDARIN, Georges, VALDURIEZ, Patrick. Relational Databases and Knowledge
Bases. Addison-Wesley Publishing Company Inc., 1989. GEOSPATIAL DATA ABSTRACTION LIBRARY. GDAL.org. Disponível:
http://www.gdal.org [capturado em 15 fev. 2007] II BRAZILIAN SYMPOSIUM ON GEOINFORMATICS, GEOINFO 2000. TerraLib:
Technology in Support of GIS Innovation [online]. São Paulo, 2000. Disponível: http://www.terralib.org/docs/papers/TerraLib_Paper_GeoInfo2000.pdf [capturado em 31 out. 2006].
ISFF. Intergraph Standard File Formats – MicroStation 95 Reference Guide, capítulo 18.
Bentley Systems Inc., 1995 [online]. Disponível: http://dgnlib.maptools.org/dl/ref18.pdf [capturado em 02 dez. 2006].
MAGUIRE, D. Geographical Information Systems: Principles and Applications. John
Wiley & Sons, 1991. MEDEIROS, Cláudia B., PIRES, Fátima. Databases for GIS. ACM SIGMOD Record, v. 23
n. 1, 1994.
40
OGC. The OpenGIS Abstract Specification – Topic 0: Overview. Open Geospatial Consortium Inc., 1999 [online]. Disponível: http://www.opengeospatial.org/standards/as [capturado em 25 ago. 2006].
OGR SIMPLE FEATURES LIBRARY. Geospatial Data Abstraction Library [online].
Disponível: http://www.gdal.org/ogr [capturado em 15 fev. 2007]. POSTGRESQL.ORG GLOBAL DEVELOPMENT GROUP. PostgreSQL 8.2.0
Documentation [online]. Disponível: http://www.postgresql.org/files/documentation/pdf/8.2/postgresql-8.2-A4.pdf [capturado em 08 mai 2007]
TOMLIN, D. Geografique Information Systems and Cartographic Modelling. New York:
Prentice-Hall, 1990. TUTORIAL DE PROGRAMAÇÃO DO TERRALIB – Disponível:
http://www.terralib.org/docs/v313/TutorialProgramacaoTerraLib313.htm [capturado em 31 out 2006].
TUTORIAL DO TERRAVIEW – Disponível: http://www.dpi.inpe.br/terraview/index.php
[capturado em 31 out. 2006]. UCHÔA, H. N. et al. Evaluation of Data Conversion of Vectorial Geographic Features in
Topographic Maps Using Free Software Tools. In: FÓRUM INTERNACIONAL DE SOFTWARE LIVRE, 2006, Porto Alegre.
WARMERDAM, Frank. DGNLib: a MicroStation DGN (ISFF) Reader [online].
Disponível: http://dgnlib.maptools.org [capturado em 02 dez. 2006] WARMERDAM, Frank. Shapefile C Library V1.2 [online]. Disponível:
http://shapelib.maptools.org [capturado em 09 mar. 2007].
41
ANEXO I – CÓDIGO-FONTE DO PROGRAMA DGNTOSHP - Arquivo cdgntoshp.cpp //////////////////////////////////////////////// // Titulo: Classe CDgnToShp // // Autor: Mauricio Carvalho Mathias de Paulo. // // (de Paulo, M. C. M.) // // Ano: 2006 // // Licença: MIT // //////////////////////////////////////////////// #include "cdgntoshp.h" int cdgntoshp::copy(string filename, string dir) { vector<string> layers; unsigned int i,j,total; int ilayer,pos; string dbname,layername,outname; stringstream ss; vector<string>::iterator v_iter; OGRLayer *layer,*poLayer; OGRFeature *feat; //OGRFeatureDefn *columns; if (!(this->readdgn(filename))) return 0; this->createshpdir( dir); layer=this->ods->GetLayer(0); layer->ResetReading(); dbname=this->ods->GetName(); feat=layer->GetNextFeature(); total=0; while (feat != NULL) { total++; //finding where to save the feature ilayer=feat->GetFieldAsInteger("level"); outname=dbname; cout << outname <<endl; pos=outname.rfind("/",outname.length()-1); outname=outname.substr(pos+1,outname.rfind(".",outname.length()-1)-
pos-1); ss<< outname << "_L"<<ilayer <<"_G" <<feat->GetGeometryRef()-
>getGeometryType(); ss>>layername; cout <<layername<<endl; v_iter=find(layers.begin(),layers.end(),layername); if (v_iter==layers.end()) { //if file does not exists, create it cout << "Creating file " << layername << ".shp" << endl; layers.push_back(layername); char **papszOptions = NULL; papszOptions = CSLSetNameValue( papszOptions, "DIM", "2" ); papszOptions = CSLSetNameValue( papszOptions, "OVERWRITE",
"YES" ); poLayer = this->dds->CreateLayer(layername.c_str(), NULL, feat-
>GetGeometryRef()->getGeometryType(), papszOptions ); CSLDestroy( papszOptions ); if( poLayer == NULL ) {
42
cout << "Layer creation failed." <<endl; return( 0 ); } //copy layer definition //columns=layer->GetLayerDefn(); i=feat->GetFieldCount(); cout <<"Columns : "; for (j=0;j<i;j++) { poLayer->CreateField(feat->GetFieldDefnRef(j)); cout << feat->GetFieldDefnRef(j)->GetNameRef() << ", "; } cout <<endl; } else { //points to the right layer poLayer=this->dds->GetLayerByName(layername.c_str()); //cout << layername; } //copy feature poLayer->CreateFeature(feat); //cout <<feat->GetFieldAsString(8)<<endl; OGRFeature::DestroyFeature(feat); //delete poLayer; //feat->DestroyFeature(feat); feat=layer->GetNextFeature(); break; } cout << "Found levels: "; for (i=0;i<layers.size();i++){ cout << layers[i] << ", "; } cout <<" containing " << total << " features" <<endl; feat->DestroyFeature(feat); //delete feat; //delete layer; //return levellist; OGRDataSource::DestroyDataSource( ods ); OGRDataSource::DestroyDataSource( dds ); //delete this->outDriver; return 1; } cdgntoshp::~cdgntoshp() { /*OGRDataSource::DestroyDataSource( ods ); OGRDataSource::DestroyDataSource( dds ); delete this->outDriver;*/ } int cdgntoshp::readdgn(string filename) { this->ods = OGRSFDriverRegistrar::Open(filename.c_str(), FALSE ); if( ods == NULL ) { printf( "Arquivo invalido.\n" ); exit( 1 ); return 0; } return 1; }
43
int cdgntoshp::createshpdir(string dir) { const char *pszDriverName = "ESRI Shapefile"; this->outDriver = OGRSFDriverRegistrar::GetRegistrar()-
>GetDriverByName( pszDriverName ); if( this->outDriver == NULL ) { cout << pszDriverName << " driver not available." <<endl; return( 0 ); } this->dds = this->outDriver->CreateDataSource( dir.c_str(), NULL ); if( this->dds == NULL ) { cout << "Creation of output file failed." << endl; ; return( 0 ); } return 1; } /*int cdgntoshp::openpgdb() { this->dds=OGRSFDriverRegistrar::Open(""); }*/ vector<int> cdgntoshp::listlayers() { unsigned int i; int ilayer; vector<int> levellist; vector<int>::iterator v_iter; OGRLayer *layer; OGRFeature *feat; layer=this->ods->GetLayer(0); layer->ResetReading(); feat=layer->GetNextFeature(); while (feat != NULL) { ilayer=feat->GetFieldAsInteger("level"); v_iter=find(levellist.begin(),levellist.end(),ilayer); if (v_iter==levellist.end()) { levellist.push_back(ilayer); } //feat->DumpReadable(NULL); feat=layer->GetNextFeature(); } cout << "Found levels: "; for (i=0;i<levellist.size();i++){ cout << levellist[i] << ", "; } cout <<endl; delete feat; delete layer; return levellist; } cdgntoshp::cdgntoshp() { OGRRegisterAll(); }
44
- Arquivo cdgntoshp.h //////////////////////////////////////////////// // Titulo: Header CDgnToShp // // Autor: Mauricio Carvalho Mathias de Paulo. // // (de Paulo, M. C. M.) // // Ano: 2006 // // Licença: MIT // //////////////////////////////////////////////// #ifndef CDGNTOSHP_H #include "ogrsf_frmts.h" #include "gdal_priv.h" #include <string> #include <iostream> #include <vector> #include <algorithm> #include <sstream> using namespace std; class cdgntoshp { public: int createshpdir(string dir); int readdgn(string filename); //int openpgdb(); vector<int> listlayers(); int copy(string filename, string dir); cdgntoshp(); ~cdgntoshp(); private: OGRDataSource* ods, *dds; OGRSFDriver *outDriver; }; #endif
45
- Arquivo dgntoshp.cpp //////////////////////////////////////////////// // Titulo: Conversor DgnToShp // // Autor: Mauricio Carvalho Mathias de Paulo. // // (de Paulo, M. C. M.) // // Ano: 2006 // // Licença: MIT // //////////////////////////////////////////////// #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "cdgntoshp.h" #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { string entryfile=argv[1]; string outdir=argv[2]; cdgntoshp tool; tool.copy(entryfile,outdir); }
46
ANEXO II – CÓDIGO-FONTE DO PROGRAMA DGNTOPG - Arquivo cdgntopg.cpp ///////////////////////////////////////////////////// // Titulo: Classe CDgnToPG // // Autor: Mauricio Carvalho Mathias de Paulo. // // Colaboradores: Vandro Fernandes Morgado // // Diego Benincasa F. C. de Almeida // // Ano: 2007 // ///////////////////////////////////////////////////// #include "cdgntopg.h" int cdgntoshp::copy(string filename, string dir) { vector<string> layers; unsigned int i,j,total; int ilayer,pos; string dbname,layername,outname; stringstream ss; vector<string>::iterator v_iter; OGRLayer *layer,*poLayer; OGRFeature *feat; if (!(this->readdgn(filename))) return 0; this->createshpdir( dir); layer=this->ods->GetLayer(0); layer->ResetReading(); dbname=this->ods->GetName(); feat=layer->GetNextFeature(); total=0; while (feat != NULL) { total++; //finding where to save the feature ilayer=feat->GetFieldAsInteger("level"); outname=dbname; pos=outname.rfind("/",outname.length()-1); outname=outname.substr(pos+1,outname.rfind(".",outname.length()-1)-
pos-1); ss<< outname << "_L"<<ilayer <<"_G" <<feat->GetGeometryRef()-
>getGeometryType(); ss>>layername; v_iter=find(layers.begin(),layers.end(),layername); if (v_iter==layers.end()) { //if file does not exists, create it cout << "Criando tabela " << layername << endl; layers.push_back(layername); char **papszOptions = NULL; papszOptions = CSLSetNameValue( papszOptions, "DIM", "2" ); papszOptions = CSLSetNameValue( papszOptions, "OVERWRITE",
"YES" ); poLayer = this->dds->CreateLayer(layername.c_str(), NULL, feat-
>GetGeometryRef()->getGeometryType(), papszOptions ); CSLDestroy( papszOptions ); if( poLayer == NULL ) { cout << "Layer creation failed." <<endl;
47
return( 0 ); } i=feat->GetFieldCount(); cout <<"Colunas : "; for (j=0;j<i;j++) { poLayer->CreateField(feat->GetFieldDefnRef(j)); cout << feat->GetFieldDefnRef(j)->GetNameRef() << ", "; } cout <<endl; } else { //if creation wasn't needed, points to the right layer poLayer=this->dds->GetLayerByName(layername.c_str()); } //copy feature poLayer->CreateFeature(feat); OGRFeature::DestroyFeature(feat); feat=layer->GetNextFeature(); } cout << "Niveis encontrados: "; for (i=0;i<layers.size();i++){ cout << layers[i] << ", "; } cout <<" contendo " << total << " objetos." <<endl; feat->DestroyFeature(feat); OGRDataSource::DestroyDataSource( ods ); OGRDataSource::DestroyDataSource( dds ); return 1; } cdgntoshp::~cdgntoshp() { /*OGRDataSource::DestroyDataSource( ods ); OGRDataSource::DestroyDataSource( dds ); delete this->outDriver;*/ } int cdgntoshp::readdgn(string filename) { this->ods = OGRSFDriverRegistrar::Open(filename.c_str(), FALSE ); if( this->ods == NULL ) { printf( "Arquivo invalido.\n" ); exit( 1 ); return 0; } return 1; } int cdgntoshp::createshpdir(string dir) { OGRRegisterAll(); this->dds = OGRSFDriverRegistrar::Open( dir.c_str(), FALSE ); if( this->dds == NULL ) { cout << "Conexao ao banco falhou." << endl;
48
exit(1); } return 1; } vector<int> cdgntoshp::listlayers() { unsigned int i; int ilayer; vector<int> levellist; vector<int>::iterator v_iter; OGRLayer *layer; OGRFeature *feat; layer=this->ods->GetLayer(0); layer->ResetReading(); feat=layer->GetNextFeature(); while (feat != NULL) { ilayer=feat->GetFieldAsInteger("level"); v_iter=find(levellist.begin(),levellist.end(),ilayer); if (v_iter==levellist.end()) { levellist.push_back(ilayer); } feat=layer->GetNextFeature(); } cout << "Niveis encontrados: "; for (i=0;i<levellist.size();i++){ cout << levellist[i] << ", "; } cout <<endl; delete feat; delete layer; return levellist; } cdgntoshp::cdgntoshp() { OGRRegisterAll(); }
49
- Arquivo cdgntopg.h ///////////////////////////////////////////////////// // Titulo: Header File Conversor DgnToPG // // Autor: Mauricio Carvalho Mathias de Paulo. // // Colaboradores: Vandro Fernandes Morgado // // Diego Benincasa F. C. de Almeida // // Ano: 2007 // ///////////////////////////////////////////////////// #ifndef CDGNTOPG_H #include "ogrsf_frmts.h" #include "gdal_priv.h" #include <string> #include <iostream> #include <vector> #include <algorithm> #include <sstream> using namespace std; class cdgntoshp { public: int createshpdir(string dir); int readdgn(string filename); vector<int> listlayers(); int copy(string filename, string dir); cdgntoshp(); ~cdgntoshp(); private: OGRDataSource* ods, *dds; OGRSFDriver *outDriver; }; #endif
50
- Arquivo dgntopg.cpp ///////////////////////////////////////////////////// // Titulo: Conversor DgnToPG // // Autor: Mauricio Carvalho Mathias de Paulo. // // Colaboradores: Vandro Fernandes Morgado // // Diego Benincasa F. C. de Almeida // // Ano: 2007 // ///////////////////////////////////////////////////// #ifdef HAVE_CONFIG_H #include <config.h> #endif #include "cdgntopg.h" #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc<5) { cout << "Como usar (para leigos):\n\n dgntopg arquivo.dgn localhost
postgis postgres teste \n\n Onde 'arquivo.dgn' eh o arquivo dgn a ser convertido, 'localhost' eh o endereco da maquina, 'postgis' eh o nome do database, 'postgres' eh o nome do usuario e 'teste' eh a senha do mesmo." <<endl;
exit(1); } string entryfile=argv[1]; string outdir="PG: host="; outdir+=argv[2]; //host outdir+=" dbname="; outdir+=argv[3]; //dbname outdir+=" user="; outdir+=argv[4]; //user outdir+=" password="; outdir+=argv[5]; //password cdgntoshp tool; tool.copy(entryfile,outdir); }