Blog Geo.NET Geoprocessamento, SIG e Sensoriamento Remoto

5Mar/100

Artigos no forno

Boa tarde pessoal!

Estou aqui no aeroporto de Congonhas e pensei em dar uma provinha dos artigos que iremos publicar na revista do mês de Abril.

O carro chefe durante um ou dois meses será a coletânea de artigos sob o tema "Desenvolvendo um Sistema de Informações Geográficas para Suporte de Decisões Municipais".

Nesta série de artigos iremos abordar diversos problemas e soluções relacionadas à construção de um sistema de propósito geral, para suporte à uma municipalidade. Iremos começar falando de arquitetura de um sistema, acesso à dados, modelo de dados e temas armazenados.

Além disso mostraremos como construir uma pequena e simples aplicação de webMaps, em cima deste sisteminha que estamos montando.

Já na parte de cadastro, teremos uma comparação dos diversos receptores e técnicas de processamento, mostrando as particularidades de cada metodologia.

Estamos preparando também um artigo sobre Sensoriamento Remoto, mas este é surpresa :P

Fiquem ligados pessoal!

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
24Feb/102

Revista Geo.NET

Boa tarde pessoal!

Em conversa com todos os bloggers do Geo.NET decidimos melhorar o blog construindo uma revista, à princípio mensal.

A revista terá artigos, parecido com os escritos no blog, mas serão mais detalhados e tudo será publicado em pdf, para sua conveniência de carregar para qualquer lugar :P .

Na primeira edição teremos a primeira parte da criação de um mini-sistema GIS web, mostrando todas as etapas de construção, detalhes da arquitetura, dificuldades de desenvolvimento deste tipo de empreendimento! O lançamento está previsto para o início de Abril.

É com grande prazer, portanto, que venho anunciar a revista do Geo.NET.

O que acham?

Informação Importante/Important Information

Pessoal, instalei um plugin tradutor no blog. Usem a vontade. À partir do momento que você clicarem em um post específico, irá aparecer um link "Translate" no topo do mesmo. É só clicar e escolher.

Hello everyone! I just installed a new translator plugin for the blog. Please, be my guest. We want to attract audiences for all over the globe. The plugin can be used by clicking on a specific post, and it will apear the "Translate" link. Just choose your language and you're done!

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
17Feb/100

Convocando…

Fala pessoal, blz? Muito bom estar colaborando com toda essa gente boa que tem aqui.

Bem, o post de hoje é fruto de um plano antigo que venho alimentando desde o começo de 2009. Para quem  me acomapanhava no blog antigo, sabe que venho estudando desenvolvimento já a algum tempo. Desde o começo do ano passado tambem me dedico a colaboração de projetos novos, como o ThubanGIS, e projetos mais sólidos, como GRASS GIS, e foruns que acho convenientes (Será que é o Geo.NET? Nããããoooo!!! kkkk). Estas colaborações passaram por elaboração de tutorias, até traduções de documentação, mas infelizmente não tive nenhum "BUM" que me fizesse parar para desenvolver alguma ferramenta (ou ao menos tentar...).

Atualmente trabalho com topografia/geodésia na Companhia de Habitação Popular da Paraíba, e sinceramente, estou achando bom demais... Falem o que quiser, mas CAMPO É BOM DEMAIS!

Navegando entre pesquisas por algum software livre que possibilitasse processar os dados de topografia (TS) e outros que processassem GPS, adivinhem: Dei com os burros n'água! Dái a velha sede por planos antigos voltou: Desenvolver um aplicativo que possibilitasse ler/processar os dados da TS e resolver as pendencias da topografia, bem como pós-prociessar os dados GPS. Bem, o desafio me foi lançado (por mim mesmo :D ) e aceito (por mim mesmo tambem :D ), então, a partir desta semana, as minhas terças e quintas estão ocupadas das 19:00 as 21:00. Desculpem todos que necessitarão de mim para as farras e bebedeiras, mas é nobre a causa! :D

Brincadeiras a parte, aproveito o espaço para convocar desenvolvedores, testers, designers e interessados no projeto para que possamos criar um equipe e trabalharmos juntos para o bem comum.

A causa é nobre e o apoio de vocês é extremamente importante.

Abraço a todos.

Vicente Martins

VN:F [1.8.4_1055]
Rating: 0.0/5 (0 votes cast)
8Feb/100

Hello World, ArcGIS style!

Boa noite pessoal,

Conforme prometi, vamos começar a brincar de ArcObjects.

Se vocês instalaram o Visual Studio 2005 (pode ser o Express, disponível gratuitamente) e depois instalaram o software development kit vocês não teram problema para acompanhar este simples guia.

Notas importantes

  • Não irei focar no código. Não irei explicar detalhadamente o que cada função faz. Isto é trabalho de vocês.
  • Irei ajudar na parte mais difícil: como começar. Existem algumas coisinhas que são chatíssimas quando programamos para ArcGIS, mas ainda bem que o próprio Visual Studio resolve algumas delas para nós.

Início

Primeiramente, abra o Visual Studio e peça um New Project. Selecione um Empty Project e dê um nome para seu projeto.

Criando um novo projeto

Criando um novo projeto no Visual Studio 2005

Depois de isso feito, termos algo mais ou menos assim:

Projeto vazio

Projeto vazio

O Visual Studio é extremamente personalizável, portanto não precisa se concentar em deixar sua tela exatamente igual a minha. Quero que você veja o Solution Explorer que fica à direita.

Vamos para o rock. O que iremos fazer?

Vamos criar uma simples barrinha de ferramentas que nos avisa quantas camadas temos em um determinado MXD. Simples né? Besta né? Mas isso vai ser o fundamento, coisas mais complexas virão.

Então vamos lá. Vá na raiz do projeto (escrito HelloWorldArcGIS) e clique com o botão direito. Clique em Add ArcGIS Reference.

O que isto exatamente faz? Bem, o ArcGIS como diversos softwares, são muito grandes, e não podemos/devemos referenciar todo o código junto. Para que adicionar referências que não iremos utilizar?

Certo, quando você clicar no botãozinho, irá aparecer uma janelinha. Vá na opção Desktop ArcMap e adicione as seguintes assemblies:

  • ESRI.ArcGIS.ArcMapUI;
  • ESRI.ArcGIS.ArcMap;
  • ESRI.ArcGIS.Display;
  • ESRI.ArcGIS.Framework;
  • ESRI.ArcGIS.Geodatabase;
  • ESRI.ArcGIS.System;
  • ESRI.ArcGIS.Carto;

Clique em Finish.

Você verá que a pasta References foi atualizada. Vamos adicionar algumas assemblies do Windows e do .NET.

Siga o mesmo passo acima, mas ao invés de escolher Add ArcGIS Reference, escolha Add Reference. Uma caixinha irá se abrir, portanto em .NET, seleciona as seguintes assemblies:

  • System
  • System.Drawing
  • System.Windows.Forms

Clique ok. Estamos good to go.

Nossas referências estão no lugar. Isto significa que poderemos utilizar código pronto contido nestas assemblies. Isto é importante e interessante que se aprenda cedo, senão algo pode deixar de funcionar simplesmente porque você nao colocou aquela referência...

Vamos agora criar uma barra de ferramentas para colocar nossas coisinhas nela.

Clique com o botão direito na raiz do projeto e clique em Add > Add New Item.

Adicionando uma barra de ferramentas

Adicionando uma barra de ferramentas

Selecione Base Toolbar e dê um nome à esta toolbar. Algo como HelloWorldToolbar, e clique em Add. Um tela irá aparecer perguntando qual tipo de barra de ferramentas você quer. Selecione ArcMap e boa.

Olhe suas referências. Elas foram atualizadas e adicionados alguns assemblies extras. Não se preocupe com eles. O Visual Studio é até inteligente para colocar algumas que você pode ter esquecido, mas só pelos canais oficiais (como este de adicionar uma toolbar). Se você criar uma classe e tentar herdar de BaseToolbar você provavelmente ganhará um erro.

Ele abriu um arquivo de código com a extensão .cs que contém diversas coisas, uns números muito doidos e por aí vai. Vamos explicar:

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.ADF.BaseClasses;

namespace HelloWorldArcGIS
{
    ///
    /// Summary description for HelloWorldToolbar.
    ///
    [Guid("cc7ed839-de6c-46a7-9817-f4a3756cc57c")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("HelloWorldArcGIS.HelloWorldToolbar")]
    public sealed class HelloWorldToolbar : BaseToolbar
    {
        #region COM Registration Function(s)
        [ComRegisterFunction()]
        [ComVisible(false)]
        static void RegisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryRegistration(registerType);

            //
            // TODO: Add any COM registration code here
            //
        }

        [ComUnregisterFunction()]
        [ComVisible(false)]
        static void UnregisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryUnregistration(registerType);

            //
            // TODO: Add any COM unregistration code here
            //
        }

        #region ArcGIS Component Category Registrar generated code
        ///
        /// Required method for ArcGIS Component Category registration -
        /// Do not modify the contents of this method with the code editor.
        ///
        private static void ArcGISCategoryRegistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MxCommandBars.Register(regKey);
        }
        ///
        /// Required method for ArcGIS Component Category unregistration -
        /// Do not modify the contents of this method with the code editor.
        ///
        private static void ArcGISCategoryUnregistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MxCommandBars.Unregister(regKey);
        }

        #endregion
        #endregion

        public HelloWorldToolbar()
        {
            //
            // TODO: Define your toolbar here by adding items
            //
            //AddItem("esriArcMapUI.ZoomInTool");
            //BeginGroup(); //Separator
            //AddItem("{FBF8C3FB-0480-11D2-8D21-080009EE4E51}", 1); //undo command
            //AddItem(new Guid("FBF8C3FB-0480-11D2-8D21-080009EE4E51"), 2); //redo command
        }

        public override string Caption
        {
            get
            {
                //TODO: Replace bar caption
                return "My C# Toolbar";
            }
        }
        public override string Name
        {
            get
            {
                //TODO: Replace bar ID
                return "HelloWorldToolbar";
            }
        }
    }
}

Vamos lá:

O que merece nota imediata:

  • O construtor da barra de ferramentas. O construtor é o método responsável por instanciar um novo objeto do tipo HelloWorldToolbar. Veja que existem um monte de comentários ensinando como podemos inserir ferramentas ou botões nele. À seguir utilizaremos eles. Mas dê uma lida nos comments com carinho.
  • A propriedade Caption. Nela temos "My C# Toolbar" como caption. Altere para o que achar melhor. Este nome é o nome que irá aparecer dentro do ArcGIS.
  • A propriedade Name. Deve ser único. Portanto, é melhor nem mexer com isto, por enquanto.
  • O restante são funções para registro/desregistro da barra de ferramentas. Isto é um pré-requisito, pois estamos trabalhando com tecnologia COM, se lembram? Não altere nada.

Nossa barra de ferramentas está criada, mas uma barra de ferramentas sozinha não me adianta de nada. Vamos criar umas ferramentinhas. Siga o mesmo procedimento que utilizou para criar a barra de ferramentas, mas desta vez, escolha BaseCommand e nomeie ele como achar melhor. No meu caso, vou dar o nome de ComandoHelloWorld.

Mais uma vez um prompt irá aparecer e te perguntar qual é o tipo de comando você quer criar. Vejamos...escolha Desktop ArcMap Command e boa.

using System;
using System.Drawing;
using System.Runtime.InteropServices;
using ESRI.ArcGIS.ADF.BaseClasses;
using ESRI.ArcGIS.ADF.CATIDs;
using ESRI.ArcGIS.Framework;
using ESRI.ArcGIS.ArcMapUI;

namespace HelloWorldArcGIS
{
    ///
    /// Summary description for ComandoHelloWorld.
    ///
    // preste atenção neste valor aqui!
    [Guid("2423ecdf-4f14-4993-a165-df9d79167f4d")]
    // preste atenção neste valor aqui!
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("HelloWorldArcGIS.ComandoHelloWorld")]
    public sealed class ComandoHelloWorld : BaseCommand
    {
        #region COM Registration Function(s)
        [ComRegisterFunction()]
        [ComVisible(false)]
        static void RegisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryRegistration(registerType);

            //
            // TODO: Add any COM registration code here
            //
        }

        [ComUnregisterFunction()]
        [ComVisible(false)]
        static void UnregisterFunction(Type registerType)
        {
            // Required for ArcGIS Component Category Registrar support
            ArcGISCategoryUnregistration(registerType);

            //
            // TODO: Add any COM unregistration code here
            //
        }

        #region ArcGIS Component Category Registrar generated code
        ///
        /// Required method for ArcGIS Component Category registration -
        /// Do not modify the contents of this method with the code editor.
        ///
        private static void ArcGISCategoryRegistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MxCommands.Register(regKey);

        }
        ///
        /// Required method for ArcGIS Component Category unregistration -
        /// Do not modify the contents of this method with the code editor.
        ///
        private static void ArcGISCategoryUnregistration(Type registerType)
        {
            string regKey = string.Format("HKEY_CLASSES_ROOT\\CLSID\\{{{0}}}", registerType.GUID);
            MxCommands.Unregister(regKey);

        }

        #endregion
        #endregion

        private IApplication m_application;
        public ComandoHelloWorld()
        {
            //
            // TODO: Define values for the public properties
            //
            base.m_category = ""; //localizable text
            base.m_caption = "";  //localizable text
            base.m_message = "";  //localizable text
            base.m_toolTip = "";  //localizable text
            base.m_name = "";   //unique id, non-localizable (e.g. "MyCategory_ArcMapCommand")

            try
            {
                //
                // TODO: change bitmap name if necessary
                //
                string bitmapResourceName = GetType().Name + ".bmp";
                base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");
            }
        }

        #region Overriden Class Methods

        ///
        /// Occurs when this command is created
        ///
        ///
        Instance of the application
        public override void OnCreate(object hook)
        {
            if (hook == null)
                return;

            m_application = hook as IApplication;

            //Disable if it is not ArcMap
            if (hook is IMxApplication)
                base.m_enabled = true;
            else
                base.m_enabled = false;

            // TODO:  Add other initialization code
        }

        ///
        /// Occurs when this command is clicked
        ///
        public override void OnClick()
        {
            // TODO: Add ComandoHelloWorld.OnClick implementation
        }

        #endregion
    }
}

Pontos merecedores de notas:

  • Novamente o construtor do comando. Ele tem diversas informações que são mostradas ao usuário no ArcGIS. Não irei explicar uma à uma, brinque com elas e teste.
  • Um campo (field) importantissímo: m_application. Ele guarda uma referência de memória à sua aplicação que está rodando. Sem o software não teria como chamar coisas que estão lá dentro.
  • Método OnClick(). Este método é que irá rodar quando o usuário clicar no comando. Nós implementaremos as coisinhas todas ali. Capiche?

Vamos adicionar nosso comando à barra de ferramentas. Lembram do construtor da barra de ferramentas, que contém alguns exemplos de Add?

Vá no seu comando e procure pelo valor GUID dele. O meu é 2423ecdf-4f14-4993-a165-df9d79167f4d. Digite isto (claro, com o seu valor GUID) no construtor da barra de ferramentas.

    AddItem(new Guid("2423ecdf-4f14-4993-a165-df9d79167f4d"), 0);

Vamos tentar compilar. Aperte F6.

Um erro deve aparecer. Ainda não configuramos nossa aplicação para abrir com o ArcMap. Vá na raiz do projeto, clique com o botão direito e vá em Properties.

Você irá ver um monte de coisas.

Na parte de Application procure Output Type e escolha Class Library.

Em Build marque a última opção, Register for COM Interop. Lembra que tudo que fazemos com ArcObjects temos que fazer com COM? Ficou estranho isso, mas válá.

Vá em DEBUG e procure a seção Start Action. Marque Start External Program e localize o arquivo ArcMap.exe no seu computador. O meu fica em C:\Program Files\ArcGIS\bin\ArcMap.exe.

Tente compilar novamente. Aperte F6. Você não deve ver nenhum erro. O ArcGIS irá abrir sozinho.

ArcGIS aberto e barra de ferramenta disponível

ArcGIS aberto e barra de ferramenta disponível

Nossa barrinha de ferramentas esta lá!

Agora vamos implementar a nossa super-ultra-mega-complexa funcionalidade. Feche o ArcMap. Retorne ao Visual Studio.

Abra o arquivo de código do nosso comando. Suba até o topo de nosso arquivo.

Você verá um monte de coisas como using System.Drawing entre outros. Aqui nós dizemos ao Visual Studio quais assemblies este arquivo poderá acessar. Faltam duas importantes para nós aí.

Insira a assembly ESRI.ArcGIS.Carto e a assembly System.Windows.Forms. Lembre-se de colocar cada uma em uma linha, e não se esqueça do ponto-e-vírgula.

        public override void OnClick()
        {
            // pegue uma referência ao documento que está rodando
            // note o uso do campo m_application
            IMxDocument documento = (IMxDocument)this.m_application.Document;

            // pegue uma referência ao mapa atual
            // note que caso tenha múltiplos data-frames isto pode não funcionar como esperado...
            IMap mapa = documento.FocusMap;

            // vamos contar quantas camadas temos no nosso mapa?
            Int32 numeroCamadas = mapa.LayerCount;

            // me diga quantas camadas eu tenho!
            MessageBox.Show("Temos neste mapa " + numeroCamadas.ToString() + " camadas!");
        }

Altere sua função OnClick nestes termos. Não copie e cole. Tente entender o que está acontencendo dentro do código. Digite linha por linha. Porque? Porque faz bem e o Visual Studio ainda irá mostrar para vocês a jóia de sua coroa, o Intellisense. Ele te sugere o que você pode estar precisando. Você conseguirá enxergar diversos atributos e propriedades de cada uma destas classes.

Tem bastante coisa interessante só nessas três classezinhas. Navegue. Use o EDN. Use o Help (F1). E poste suas dúvidas.

Bem, agora é com vocês. Me digam o que acharam. Foi difícil? À princípio vai ser difícil sim! Como meu bom e velho avô diz: rapadura é doce mas não é mole não!

Estou no aguardo das dúvidas, comentários e blasfêmias!

Espero que tenham gostado,

Um abraço,

George R. C. Silva

VN:F [1.8.4_1055]
Rating: 5.0/5 (2 votes cast)
4Feb/10Off

WebMapping Direcionado a Pesquisas Educacionais

Há alguns meses tive a oportunidade de participar como colaborador externo de um projeto de pesquisa do Centro de Educação (CE) da Universidade Federal da Paraíba (UFPB), denominado Projeto Educação Legal (PEL), onde minha responsabilidade consistia no desenvolvimento de uma aplicação Webmapping.

Assim, eu gostaria de compartilhar com vocês um pouco dessa experiência de trabalho junto ao PEL. Vou começar explicando melhor o que este projeto do CE.

O PROJETO EDUCAÇÃO LEGAL

A partir de meados do ano de 2006, o CE da UFPB tem desenvolvido um projeto denominado “Educação Legal”, que tem entre seus objetivos realizar pesquisas sobre políticas públicas, gestão educacional e participação cidadã em todo o Estado da Paraíba, para conhecer e identificar, no cotidiano do espaço escolar, os usos e as apropriações das orientações contidas nos textos legais e nas diretrizes curriculares.

Inicialmente a divulgação do projeto se deu através de um site pessoal (Blog). Embora este meio de comunicação venha se mostrando uma fonte fundamental de divulgação das atividades do PEL notou-se que o desenvolvimento de um website com mais recursos, incluindo um mapa interativo deve tornar a utilização do mesmo mais atrativa, possibilitando inclusive a visualização de mapas com temas específicos que possam servir de guia para os visitantes interessados nestas informações espacializadas. É válido destacar que esta nova proposta seria uma alternativa de acesso aos dados, acrescentando novas possibilidades de pesquisa aos dos usuários.

Os coordenadores deste projeto, pessoas de visão moderna, perceberam que se os dados pesquisados fossem disponibilizados na internet, poder-se-ia conseguir um maior envolvimento da sociedade através do acesso às informações e documentos levantados. Neste sentido, decidiu-se disponibilizar no site da UFPB, especificamente na página do PEL um mapa interativo com dados pertinentes a indicadores sociais e educacionais do estado da Paraíba, adquiridos através das pesquisas realizadas pelo projeto, bem como de diversos órgãos oficiais.

Mas enfim, como foi desenvolvido a aplicação webmapping direcionada a pesquisas educacionais?

COLETA DOS DADOS

Foi utilizada como base para geração da aplicação a base cartográfica, em formato shapefile, com a divisão municipal da Paraíba, bem como da localização das sedes municipais e das feições do oceano atlântico e dos estados limítrofes.

Estes arquivos foram obtidos através de download do site da AESA. O shapefile já trazia em sua tabela de atributos informações referentes a cada município, as quais foram utilizadas para geração de alguns dos mapas temáticos, como por exemplo a população rural, urbana e total, classificação quanto a microrregião e mesorregião geográfica, dentre outras.

Já os dados alfanuméricos foram adquiridos de informações publicadas na forma de tabelas, quadros e gráficos em sites de instituições governamentais, bem como de informações resultantes das pesquisas realizadas pelo PEL. Por exemplo, do site do Instituto Nacional de Estudos e Pesquisas Educacionais Anísio Teixeira (INEP) foram coletadas informações sobre o Índice de Desenvolvimento da Educação Básica (IDEB) da Paraíba para o ano de 2007.

INTEGRAÇÃO DOS DADOS

O programa gvSIG, em sua versão 1.1.1 foi utilizado para edição do shapefile adquirido na página da AESA inserindo-se novos campos que seriam povoados com as informações coletadas dos sites mencionados anteriormente. Nesta etapa o objetivo principal é combinar os dados tabulares adquiridos aos dados gráficos da base cartográfica.

Em alguns campos a inserção das informações na tabela de atributos foi feita manualmente, digitando-se os registros para cada um dos 223 municípios paraibanos. Este procedimento tornou-se necessário, pois os dados disponibilizados não estavam em forma de uma única tabela, mas sendo geradas individualmente de acordo com uma consulta realizada no site, como os referentes ao IDEB, por exemplo.

Depois de finalizada esta etapa de edição e integração dos dados geográficos e alfanuméricos seguiu-se com a implementação do aplicativo webmapping.

DESENVOLVIMENTO DA APLICAÇÃO WEB

O principal software utilizado para o desenvolvimento do mapa interativo do PEL foi o Alov Map em sua versão v.099y9, no seu formato applet, que é um programa para a disponibilização de dados geográficos na internet, construído sob linguagem Java.

Entre os fatores que levaram a escolha do Alov Map para o desenvolvimento da aplicação, podem-se destacar:

  1. Isenção de custos relacionados à sua aquisição, pois se trata de um software livre com distribuição gratuita;
  2. Suporte à publicação de dados no modelo vetorial shapefile no qual estava a base cartográfica utilizada;
  3. Permite acesso à múltiplos planos de informação que podem ser sobrepostos;
  4. Fácil interação com o mapa através dos navegadores para internet;
  5. Apresentação de mapas temáticos com legendas;
  6. Possibilita visualização de tabelas com atributos da área geográfica representada, além de fácil manipulação da aplicação pelo usuário final.

A escolha do Alov Map levou em consideração também o pequeno volume dos dados geográficos a serem disponibilizados (Cerca de 770 kB). Deve-se estar ciente de que se a base de dados utilizada neste trabalho fosse relevantemente maior, talvez contendo diversas camadas de informação no formato matricial o Alov não funcionaria de forma adequada.

A figura abaixo procura sintetizar o funcionamento do Alov Map em seu formato applet:

Conforme o mostrado acima, o funcionamento de um webmapping com Alov Map depende além dos dados geográficos, de duas linguagens: o XHTML e o XML, sendo que o arquivo desenvolvido com esta primeira linguagem servirá para visualizar o applet no navegador, já a linguagem XML

VN:F [1.8.4_1055]
Rating: 4.0/5 (2 votes cast)
31Jan/100

ArcObjects #1 – introdução

Boa tarde pessoal,

Mais uma vez venho a vocês com uma futura série de pequenos artigos, desta vez sobre ArcObjects, a API da ESRI para o desenvolvimento de funções que levam em conta o espaço e dados espaciais.

Bem, primeiramente devemos começar dizendo que ArcObjects não é um bicho de sete cabeças, é um bicho só de cinco. Não é nada complicado, quando você entende o que quer fazer e onde procurar.

Para quem está perdido, API é um conjunto de rotinas e funcionalidades já escritas que pode-se extender, através de programação. Ou seja, ArcObjects é essencialmente os blocos construtivos do software ArcGIS. Os caras na ESRI desenvolvem o ArcObjects e depois o usam para montar o ArcMap, por exemplo.

E realmente são muitos blocos. A API é composta (hoje, na versão 9.3) por quatro mil classes, cinco mil interfaces, mais de mil enumerações e cinquenta structs, isso sem contar os tipos escondidos e restritos!

Certo e o que mais precisamos saber sobre a API ArcObjects para começar a programar para o ArcGIS? Nada, na realidade, mas existem alguns conceitos que devem ser conhecidos.  Toda a API foi desenvolvida seguindo o modelo COM (Component Object Model), o padrão para distribuição de bibliotecas binárias em ambiente desktop, desenvolvido pela Microsoft.

E isto muda tudo. A tecnologia COM estabelece padrões e exige alguns requisitos para que um software seja COM-compatible. Finalmente, devemos entender que COM é uma arquitetura, uma forma de desenvolver software.

A arquitetura COM é baseada em servidores e clientes. O servidor, ou o objeto, dá uma funcionalidade e o cliente a utiliza. Para facilitar ainda mais, um servidor pode ser um cliente e vice-versa. A arquitetura COM facilita a comunicação entre estes dois processos (servidor/cliente). Existem muitas particularidades da tecnologia, que realmente não cabem no escopo deste post, mas todos devem ficar de olho nisto, pois software mal desenvolvido que utiliza COM é software que um dia irá explodir. Esta arquitetura tem sérios problemas de perfomance e coleta de lixo.

Para saber mais, visite esta página e esta página.

Certo, o que podemos fazer com ArcObjects? Tudo o que podemos fazer dentro do ArcGIS, podemos fazer utilizando ArcObjects. Tudo e muito mais, claro. Como o próprio ArcGIS foi construído sobre ArcObjects, estamos na realidade falando de uma coisa só!

O que preciso para desenvolver em ArcObjects?

Bem, a API está implementada em uma porção de linguagens, sendo possível utilizar qualquer uma e realizar as mesmas tarefas. As linguagens suportadas são: VC++ (Visual C++), C# (minha favorita), VB.NET, Java e até VBA (cuidado, o suporte para VBA ACABOU!).

Não existe melhor ou pior, apenas diferente :P . Caso você tenha experiência com uma ou outra, sugiro que comece pela linguagem que tem maior familiaridade, mas um aviso: existem tendências e a tendência é .NET (C# principalmente).

Após escolher sua linguagem de preferência, instale um IDE (Integrated Development Environment - como o Visual Studio, no caso de .NET) e instale as bibliotecas que veêm com o ArcGIS. Note que as bibliotecas já estão no CD de instalação do ArcGIS Desktop (as bibliotecas de programação para Desktop, claro).

Primeiro instale o ambiente de desenvolvimento e depois a biblioteca. Nunca o contrário.

instalacao sdk

Tela de Instalação dos SDK's ArcGIS Desktop

Depois que tudo estiver instalado, sugiro que passe um tempo se familiarizando com cada IDE e com a referência oficial da ESRI. Ache um pequeno problema que lhe incomoda no ArcGIS (algo que poderia ser mais fácil, ou poderia ser diferente e facilitaria seu trabalho - imagino que existem diversas coisas) e tente criar alguma coisa em ArcObjects para isto.

Como são muitas classes e interfaces, não se preocupe em conhecer todas, se preocupe em conhecer como achar na referência oficial dados sobre determinada classe/interface.

Aviso aos navegantes: é muito comum em ArcObjects você ter de instaciar dois, três ou quatro objetos para fazer uma coisinha simples (como é o caso das interfaces IFields e IFieldsEdit, IField e IFieldEdit, entre outras).

Os namespaces mais utilizados, provavelmente são esriSystem, ArcMap, ArcMapUI, Geometry e Geodatabase. Todos tem sua própria página na ESRI, incluindo um diagrama completo do mesmo.

Caso tenham dúvidas, estamos aqui! Próximo post: Hello World, ArcGIS style!

Abraços

George

VN:F [1.8.4_1055]
Rating: 5.0/5 (2 votes cast)
31Jan/101

O Geoprocessamento e Suas Tecnologias – Parte 2

Olá!

Conforme vimos na primeira parte deste post, o Geoprocessamento é um conjunto de tecnologias dinâmicas com alto potencial de aplicação.

Até aqui vimos que Geoprocessamento e SIG não são as mesma coisa. O SIG é apenas uma importante tecnologia dentre as diversas incluídas no Geoprocessamento.

Vimos também que programas como o gvSIG e ArcGis não são "SIGs" mas softwares para SIG. Assim como o Geoprocessamento possui várias ramificações tecnológicas o SIG é um sistema composto por softwares, hardwares, metodologias, recursos humanos e dados.

Ficamos de ver o que são e pra servem tecnologias como o Banco de Dados Geográfico e o WebMapping.

Banco de Dados Geográficos

Bom, vamos por partes. O que é um Banco de Dados (BD)?

Todo local, físico ou virtual onde estão armazenados dados, pode em certo sentido, ser chamado de banco de dados. Por exemplo, uma enciclopédia pode ser considerada um banco de dados. Mas para nós aqui da área de Geoprocessamento é mais importante o conceito especial de banco ou base de dados relacional. Ou seja um banco onde dados são armazenados na forma de tabelas relacionáveis entre si através campos chaves.

As mais diversas facetas de atividades, desde locadoras de DVD até grandes indústrias metalúrgicas usam-se deste tipo de base para ter um maior controle sobre fatores como cadastro de clientes e sua condição em relação à empresa (Inadimplência, por exemplo).

Neste ponto, é importante evitar confundir o BD em sí (conjunto de tabelas relacionáveis) com o programa que o gerenciará, o Sistema Gerenciador de Banco de Dados (SGBD). EM outras palavras, softwares como Access, MySQL, Oracle, PostgreSQL não são BD, mas sim SGBD.

Mas ainda não falamos no assunto deste tópico. O que é e para que serve um Banco de Dados Geográfico (BDG)?

O BDG, também chamado de Banco de Dados Espacial (BDE), é semelhante ao descrito acima (relacional), com a grande e importante diferença de suportar feições geométricas em suas tabelas.

Este tipo de base com geometria oferece a possibilidade de análise e consultas espaciais. É possível calcular nestes casos, por exemplo, áreas, distâncias e centróides, além de realizar a geração de buffers e outras operações entre as geometrias.

Como dica de estudos para você obter uma boa base conceitual sobre BDG, indico o livro "Banco de Dados Geográficos" do INPE, que está disponível para download em PDF aqui.

Atualmente, alguns programas de SGBD desenvolveram extensões que inserem no software características de Sistemas Gerenciadores de Banco de Dados Geográficos (SGBDG) o PostgreSQL, MySQL, e Oracle, sendo os dois primeiros softwares livres e o último proprietário.

Vamos falar um pouco mais do PostgreSQL e como ele passa a agir como SGBDG. O PostgreSQL é desenvolvido atualmente pela PostgreSQL Global Development Group. Quando se percebeu a necessidade de extender este SBGD para suportar dados espaciais desenvolveu-se a extensão conhecida como PostGis.

Sendo assim, vamos entender que o PostGis não é um BDG ou um SGBDG, ele é apenas uma extensão, um plugin, do PostgreSQL que lhe confere funções para armazenamento e manipulação de dados geográficos.

A figura abaixo procura mostrar a diferença entre o PostgreSQL e "seu filho". Note que para termos um BDG no PostgreSQL faz-se necessária a devida instalação da extensão PostGis.

Você pode importar arquivos vetoriais shapefile (*.shp) para dentro de um "Banco PostGis" utilizando recursos oferecidos pelo próprio programa ou utilizando algum software de SIG com essa funcionalidade. O shapefile será convertido em uma tabela espacial que pode ser integrada com as convencionais contidas na base, além de poder ser visualizada e manipulada através de programas como o gvSIG, Kosmo, Quantum Gis, Udig e muitos outros desta safra. Para baixar tutoriais sobre como realizar esta operação com alguns destes softwares, clique aqui.

Para baixar a versão mais recente do PostgreSQL e sua extensão espacial PostGis, acesse os links abaixo.

Para finalizar este post vamos considerar outra tecnologia do Geoprocessamento, a saber, WebMapping.

WebMapping (WebGis)

A internet vem se destacando nos últimos anos como uma excelente ferramenta para disponibilização e interligação de dados das mais diversas fontes e naturezas.

A geomática, como área do conhecimento, também encontrou na internet um nicho para suas atividades. A disponibilização de mapas digitais, os chamados WebGis ou WebMapping, tem-se tornado comum, permitindo que um maior número de usuários tenha acesso a dados espacializados, de forma hábil e atraente.

Talvez o estopim para o crescimento das aplicações SIG para internet tenha sido a popularização de serviços online gratuitos de localização como o Google Earth e Google Maps.

Os mapas na web se apresentam de três formas princiapais:

1) Mapas Estáticos - Mapas no formato de imagem (*.jpg, *.gif, *.png, etc) integrados à páginas da internet.

2) Mapas Gerados à partir de formulários - Fornece-se parâmetros para geração de mapas na forma de imagem.

3) Mapas Dinâmicos - O usuário seleciona uma área de seu interesse em um mapa geral, gerando uma navegação para outro mapa ou imagem mais específico com informações mais detalhadas desta região. Em geral apresentam interface atraente com ícones para consulta espacial calculo de distância e etc.

Para mais detalhes sobre tipos de mapas veja a publicação disponibilizada neste link.

Há muitos softwares e frameworks livres para o desenvolvimento de aplicações WebGis. Podemos destacar alguns: MapServer, GeoServer, i3Geo, Alov Map, Time Map, Open Layers e P.Mapper.

Diversos órgãos públicos fazem uso destas ferramentas para divulgação dos resultados de seus trabalhos.

A imagem abaixo mostra um exemplo de aplicação desenvolvida com MapServer e o framework P.Mapper. Clique aqui para acessar a página da aplicação (Este é um exemplo de mapa dinâmico).

Nesta visão geral sobre algumas das tecnologias do Geoprocessamento, pudemos dissipar alguns falsos conceitos em torno de termos como SIG, BDG, SGBDG, WebGis, etc. Espero que tenham gostado do que leram.

Fiquem à vontade para deixar sua sugestão de tema, críticas e impressões através do e-mail anderson[@]geoprocessamento.net

Anderson Medeiros

Tecnólogo em Geoprocessamento

VN:F [1.8.4_1055]
Rating: 5.0/5 (2 votes cast)
30Jan/105

Consulta pública #1

Bom dia pessoal,

O blog está começando a tomar uma forma, uma cara de blog mesmo. Terminei de importar as informações do antigo blog que interessavam e agora temos de escrever coisas inéditas. Lembrem-se que temos diversos autores, portanto, temas variados!

Gostaria de pedir uma ajuda dos leitores, sobre o que eles gostariam de ouvir:

  • WebMapping
  • Banco de Dados
  • Desenvolvimento para GIS

Deêm seus pitacos!

Um abraço,

George

VN:F [1.8.4_1055]
Rating: 5.0/5 (1 vote cast)
Get Adobe Flash playerPlugin by wpburn.com wordpress themes