Archive for the 'SIG' Category

Page 3 of 3

GDAL Como criar ficheiros tfw

Uma nota rápida sobre criar ficheiros de georreferenciação .tfw a partir de ficheiros GeoTiff.

As imagens GeoTIFF são ficheiros TIFF que contém a georreferenciação na própria imagem e por isso não são acompanhados pelo ficheiro .tfw, que é apenas um ficheiro de texto indicando as coordenadas da imagem.

Existem momentos em que queremos ter os TIFF acompanhados dos ficheiros tfw, seja porque o programa que vamos usar o exige ou porque a aplicação que estamos a desenvolver só consegue ler as coordenadas num ficheiro de texto, ou por outra razão qualquer…

A questão é saber: existe alguma forma rápida de obter o ficheiro tfw??

Claro. Basta usar um comando que vem incluído na distribuição FWTools e no MS4W (que inclui o GDAL), e que se chama listgeo.

Ao executar o listgeo numa janela FWTools, recebemos de volta a apresentação da sintaxe:
C:\Program Files\FWTools2.2.6>listgeo
Usage: listgeo [-d] [-tfw] [-proj4] [-no_norm] [-t tabledir] filename

-d: report lat/long corners in decimal degrees instead of DMS.
-tfw: Generate a .tfw (ESRI TIFF World) file for the target file.
-proj4: Report PROJ.4 equivelent projection definition.
-no_norm: Don't report 'normalized' parameter values.
filename: Name of the GeoTIFF file to report on.

Assim, para criar o .tfw de uma imagem podemos usar um comando como o seguinte:
listgeo -tfw 26501500.tif
E ficamos com o .tfw criado.
Dubium sapientiae initium.

Desenvolver aplicações SIG de forma Agile!

Estou a digerir tudo o que vi na formação de 3 dias sobre metodologias Agile e Scrum e este post servirá como bloco de notas.

Esta semana estive 3 dias em formação com o excelente formador Mitch Lacey. Este sr. tem já uma grande experiência em projectos de desenvolvimento de software, e ouvi-lo foi realmente uma experiência enriquecedora.

Não vou entrar em grandes detalhes teóricos sobre Agile/Scrum, porque não sou definitavemente a pessoa indicada para o fazer. Vou em vez disso enumerar os pontos que mais me impressionaram e que mais valor terão se os integrar na forma como a “minha” equipa funciona. Portanto, as afirmações seguintes devem ser encaradas como uma perspectiva muito pessoal…

Agile é um conjunto de práticas que visam desenvolver um projecto de forma iteractiva, com ciclos curtos entre versões intermédias antes de chegar à entrega final, com vista a reduzir os riscos associados a este tipo de projectos – sendo o maior entregar um produto que não se ajusta à visão do cliente!

Scrum é a metodologia Agile mais difundida, e obteve o seu nome do Rugby: scrum é a altura em que os jogadores se reunem para reiniciar o jogo, e ambas as equipas disputam a bola. Em Agile, Scrum é um método em que uma equipa de desenvolvimento se concentra ferozmente em terminar um conjunto de tarefas num prazo curto – tipicamente 14 ou 28 dias – e se compromete a no final do prazo produzir uma versão funcional do produto que está a desenvolver.

Qual é a grande diferença em relação ao processo tradicional (designado “Waterfall” ou “em Cascata“)? É que no processo Waterfall, os requisitos para a aplicação a desenvolver são definidos à partida, na fase de levantamento e definição dos mesmos. Em seguida, esta lista de especificações é trabalhada com o cliente final, e atinge-se um acordo, sendo fechada a lista de itens a implementar. E é aqui que este método tem a sua maior fraqueza: é pouco flexível, e não considera facilmente requisitos que se alteram com o tempo (alguém se identifica com esta experiência??). A analogia de construir uma casa é muito clarificadora: ao olhar para a planta da minha futura casa, posso ficar muito satisfeito com o que está planeado. Mas, mais tarde, ao andar pela estrutura já construída da casa, vou conseguir obter uma visão mais clara do que estava na planta, e consequentemente vou definir melhoramentos e até novas funções que quero ter na versão final da casa. Isto é um processo natural e não deve ser combatido. E é o que os métodos Agile nos oferecem: ao cliente final permite algum controlo durante a vida do projecto, e à equipa de desenvolvimento permite um grande poder de adaptação à mudança, permitindo concluir o projecto dentro do prazo e do orçamento, mesmo absorvendo alterações aos pressupostos iniciais. E para descansar os espíritos mais desconfiados, resta acrescentar que esta metodologia é reconhecida pelo PMI, e é usada pelas maiores empresas de software como Microsoft ou IBM.

Porque é que estas técnicas me interessaram? Os pontos mais importantes:

  • A equipa de desenvolvimento com que trabalho é pequena – podemos contar com 2,5 técnicos (sim, temos realmente uma metade de técnico!), e somos facilmente dispersados por várias solicitações em simultâneo
  • O meio onde nos inserimos é muito dinâmico – as alterações aos requisitos são muito frequentes, e a sua definição inicial é muito difícil de obter e estabilizar
  • Trabalhamos para o “Cliente Interno”, onde as relações informais dominam, e os processos formais inerentes ao método Waterfall dificilmente são aplicados e respeitados

Da abordagem Scrum, estes são os pontos que mais me agradam e que vejo possibilidade de implementar rapidamente:

  1. Definir o “Product Backlog”, que mais não é que uma lista de funções a implementar numa aplicação, ordenada por prioridade
  2. Definir o “Sprint Backlog”, que é a lista prioritizada de funções que vamos implementar no próximo ciclo de 14 dias (o sprint)
  3. Reuniões relâmpago diárias, onde rapidamente (15 min.) cada um dos elementos da equipa percorre estes 3 pontos – o que concretizaste ontem, o que vais fazer hoje, e tens algum ponto crítico?
  4. Estar atento a solicitações de alterações ou novas funções, mas lutar por integrá-las no Product Backlog, que poderá ser re-prioritizado todas as semanas (mas as funções só podem entrar num sprint no seu início)
  5. Consciencializar todos os elementos da equipa de que todos são responsáveis pela equipa! Todos se devem preocupar com a saúde emocional da equipa e com a concretização dos compromissos assumidos com o exterior (notem aqui a grande diferença mental entre cumprir objectivos e cumprir compromissos)
  6. Obter uma versão funcional no final de cada Sprint! E demonstrá-la. Na teoria Scrum, a demo deve ser feita ao cliente. No meu caso, parece-me mais plausível realizar uma demo interna à equipa, para validar a direcção dada ao projecto, detectar incongruências, enfim, andar pela estrutura da casa e ver se é como imaginámos quando fizemos a planta…

É realmente uma forma de trabalhar muito aliciante, e que de alguma forma torna o desenvolvimento de projectos mais humano.

Algumas ferramentas consideradas essenciais a uma boa prática Agile já utilizamos na equipa:

  • Repositório de código e Controle de versões – usamos o SVN, e o AnkhSVN para integrar com o Visual Studio. Não há checkin de código que não compile. Este é um passo fundamental na organização da equipa!
  • Documentação – embora não tenhamos ainda a prática de documentação automática do código, embora já se tenha discutido o assunto várias vezes, usamos um Wiki para documentar quer a vertente técnica quer a vertente de utilização das aplicações

E das peças que nos faltam, o que podemos integrar no nosso caso particular?

  • Teste unitários – é algo que deveremos implementar, mas que está ainda algo longíquo de ser possível… é necessário primeiro re-organizar o código em componentes suficientemente pequenos, modulares, para possibilitar esta técnica. Mas os ganhos são óbvios – rapidez de efectuar testes e na detecção de bugs
  • Test Driven Development – ver ponto anterior, é algo desejável, mas cuja execução obriga a remodelar o repositório de código existente. Talvez a longo prazo seja possível…

Para mais informação recomendo vivamente a leitura deste artigo: “Agile Project Management for GIS“. Muitos mais podem ser encontrados “googlando” a Internet (como por exemplo este na revista PM Network, pp 42). E para aqueles que ficarem convencidos, fica a referência do curso – Fullsix.

Planeta SIG – notícias RSS num só local

Durante o fim de 2008 e início de 2009 decidi criar um agregador de notícias RSS sobre SIG em português. Podem encontrá-lo aqui:

htpp://planetasig.viasig.com

Como usar

A forma mais simples de usar um Planeta é consultar o site directamente no browser e ver as notícias que aparecem. As mais recentes são colocadas no topo da página, e no caso do Planeta SIG aparecem divididas por dia.

A forma mais prática de usar um Planeta é recorrer a um leitor de feeds RSS, ou seja, um leitor de notícias (RSS Reader). Eu uso o leitor do Google Desktop e que se vê na barra lateral. Mas existem várias opções, e para todos os gostos. Quem usa o Vista tem um leitor de RSS que pode incluir na barra lateral. Tem só de acrescentar o endereço RSS do Planeta SIG que é:

http://feeds.feedburner.com/PlanetaSig

Selecção de Conteúdos

Ao pesquisar a blogosfera por conteúdos interessantes para incluir no cheguei à penosa conclusão de que existe muito pouco conteúdo sobre SIG em português. E assim para tornar tudo mais interessante alarguei o âmbito para incluir também conteúdos que possam ser interessantes a leitores portugueses, excluindo claro a blogosfera não lusofona (inglês principalmente – para isso basta visitar o Planet Geospatial). Esta decisão permitiu incluir vários conteúdos brasileiros. Depois pensei ainda que a comunidade PT se interessa muito pelo que os nossos vizinhos espanhóis vão fazendo, principalmente nas áreas Open Source, e de publicação de dados. E assim incluí também feeds em língua espanhola. A lista actualizada dos conteúdos coleccionados pode ser vista na página do Planeta SIG à direita.

A lista não está fechada, e procuro activamente blogs e sítios de notícias que possam interessar à comunidade geo-espacial portuguesa (ou já agora lusófona). Se tiverem uma sugestão, por favor deixem um comentário.

As única regras para inclusão de conteúdos são:

  1. ser sobre SIG e afins
  2. blog estar activo
  3. ser relevante para a comunidade pt (pode ser espanhol, brasileiro, etc., mas não inglês, francês, etc.)
  4. e uma 4ª regra: não há blogs de empresas…

Tecnologia

Depois de pesquisar as opções existentes para criar agregadores RSS, acabei por seguir as indicações do James Fee, que mantém o Planet Geospatial, e do Chris Schmidt (pioneiro do OpenLayers). A OSGeo seguiu as indicações destes 2 srs. e usou o software Venus para criar o planeta sobre a blogoesfera da área SIG Open Source – PlanetOSGeo. E eu, humildemente, segui o mesmo conselho.

O Venus é baseado em Python, linguagem que o meu fornecedor de presença Internet (hosting provider) suporta. Mas não se encontra traduzido em Português, e assim as datas, títulos, separadores, e outros textos estão em inglês.

O Venus lê um ficheiro de configuração que inclui a lista de endereços de notícias RSS a consultar, e compila uma página HTML com todas essas notícias, separadas por dia e por sítio. A própria página é desenhada de acordo com um modelo (template), que podemos alterar. Por isso, traduzir todos os textos de inglês para português foi fácil – excepto as datas! Porque as datas são criadas pelos módulos de Python e por omissão são construídas em inglês – e isto inclui o nome dos meses e dos dias da semana. Não se pode controlar através do template.

Depois de analisar os ficheiros do Venus, descobri que alterando o ficheiro config.py, indicando que se devem seguir as definições regionais de portugal, conseguia datas em português. Assim ficou tudo resolvido, fazendo as seguintes alterações ao ficheiro:

alterada a linha 29:

import os, sys, re, urllib, locale

adicionada a linha 33:

locale.setlocale(locale.LC_ALL,'pt_PT')

E bastou estas pequenas alterações para ter todo o Planeta SIG em PT.

Uma última nota: em Vista, o locale acima não é reconhecido. Devemos usar ‘Portuguese_Portugal.1252′.

Actualização das notícias

A actualização é feita automaticamente, através de um comando PHP executado por um pedido web, e recorrendo ao serviço gratuito WebSchedule da ArtCava (que equivale ao comando cron do Linux e às “Tarefas Agendadas” do Windows).

Parametrizei a actualização para ser feita a cada 1h, mas suspeito que este período não está a ser cumprido… talvez seja mais de 4h em 4h.