terça-feira, 30 de setembro de 2014

Instalação QGIS 2.4 no windows

Meu amigo, +Cleidir Bicca  preparou um tutorial, bem completinho, da instalação do QGIS no windows. Não tem segredo, e segundo ele é mias fácil que no ubuntu, mas não necessariamente melhor... lol. Quem instalar e testar os arquivos que disponibilizei para teste neste post, por favor deixe um comentário com o feedback.
Obrigado, e obrigado Cleidir.

OBS - Ao final, o Cleidir separou uns links bacanas, vale a pena conferir.
O documento pode ser baixado aqui.


me>

domingo, 28 de setembro de 2014

Plotly: Ferramenta para ótimos gráficos online e gratuita.



Apresentando o Plotly, uma ferramenta online boa, bonita e gratuita para se fazer gráficos dinâmicos para se compartilhar.

Você consegue, através de 3 linhas de rotina no R ou Matlab fazer o upload dos seus dados e produzir gráficos bonitos e em alta resolução. Também é possível adicionar os dados via um csv ou copia e cola, e fazer toda a edição no próprio website. Depois, basta salvar como figura, compartilhar ou embeber o código htlm no seu site.

Para os ainda mais aplicados, é possível e simples plotar dados diretamente das plataformas Arduíno ou via Python.

Vale muito à pena.

Nesta amostra, estou apresentando alguns dados da Estação Meteorológica Automática de Rio Grande, obtidos no site do INMET.

terça-feira, 23 de setembro de 2014

Instalação GRASS 7 no ubuntu 14.04

A nova versão do GRASS, ainda em beta, tem algumas novas atrativas ferramentas que podem ser conferidas aqui, dentre elas uma que chamou muito a atenção é uma ferramenta para fazer animação, por exemplo com alguma série de raster temporal. A ferramenta é a g.gui.animation. Quem sabe, daqui a pouco meu colega +Tiago Gandra  não anima em fazer um tutorial, já que ele andou explorando a ferramenta. Mas vamos à instalação para que você possam desfrutar. Basicamente os passos são os mesmo descritos no site do programa, com uma ligeira modificação ao final. Mas aqui ainda dou a dica pra quem precisa instalar o programa em alguma máquina em um ambiente em que as conexões usam proxy.

GRASS 7

Caso você ainda não tenha  GRASS anterior instalado, instale-o:
sudo apt-get install grass grass-gui
Este comando irá instalar a versão estável do GRASS, a versão 6.4.3. Para a maioria das aplicações a versão atual é suficiente, porém a versão 7 apresenta algumas funcionalidades novas. Quem sabe em breve saia uma publicação aqui mostrando algumas delas. Para a versão 7, ainda em versão beta, é necessário adicionar o canal de repositório do GRASS como descrito no próprio site e em seguida atualizar a lista de repositório do sistema.
sudo add-apt-repository ppa:grass/grass-stablesudo apt-get update
Como mencionado anteriormente, caso esteja atrás de uma conexão com proxy será necessário usar os seguintes comandos (fonte é a mesma citada acima):
export http_proxy=http://proxy.furg.br:3128export https_proxy=http://proxy.furg.br:3128
sudo -E add-apt-repository ppa:grass/grass-stablesudo apt-get update 
E para instalação, diferente do mencionado no site do GRASS, em vez de instalar os pacotes 'grass70' e 'grass70-gui', instale os pacotes 'grass70-core' e 'grass70-gui':
sudo apt-get install grass70-core grass70-gui 
Para iniciar o programa pode procurar o grass7 no dash ou excecutar:
grass70 

--------------------------------------------------------------------------------------------

Infelizmente, se você estiver com as duas versões instaladas, apenas a versão antiga funcionará integrada ao QGIS, pois o plugin de integração do programa ainda é para a versão 6.4.x

Instalação QGIS 2.4 no ubuntu 14.04 (recém instalado)

E aí pessoal? Fui encorajado a escrever este tutorial para servir de apoio aos alunos da nova disciplina de geotecnologias oferecidas esse semestre para os estudantes do curso de oceanologia da FURG. O objetivo é descrever o passo a passo para a instalação do programa num sistema Ubuntu 14.04 recém instalado, garantindo a funcionalidade dos mesmo para uso nas aulas prática na disciplina. Muito em breve, um colega irá escrever um tutorial equivalente para usuário de sistema Ruin...Windows. Mas como entusiasta dos open source incentivo a instalação  e uso do Ubuntu ou similares. Ao final do tutorial, disponibilizo um link para downloads de arquivos para teste e garantir que tais extensões sejam lidas, principalmente se você não está usando um mesmo OS que eu.

Quantum GIS

O Quantum GIS já deve estar disponível para instalação em seus repositórios, porém iremos adicionar o repositório oficial do projeto, garantindo termos sempre a versão estável mais recente. Os passos descritos constam no próprio site do QGIS. Vamos lá, abra um terminal (Ctrl+Alt+T) e digite o comando a seguir para adicionar o repositório do QGIS a sua lista de repositório. Atente que o comando é para a versão 'trusty' do ubuntu, 14.04 LTS, caso esteja usando outra versão tenha o cuidado de adaptar o comando.
sudo add-apt-repository 'deb     http://qgis.org/debian trusty main'
Em seguida vamos adicionar a chave de autenticação para este repositório:
gpg --keyserver keyserver.ubuntu.com --recv DD45F6C3
gpg --export --armor DD45F6C3 | sudo apt-key add -
Para aqueles que estiverem atrás de uma conexão com proxy, como acontece na FURG, então é necessário modificar o comando para que o ubuntu a importação da chave utilizando o proxy. Aprendei aqui.
sudo apt-key adv --keyserver-options http-proxy=http://proxy.furg.br:3128/ --keyserver keyserver.ubuntu.com --recv DD45F6C3
Com o novo repositório adicionado, basta então atualizar a lista de repositório do sistema e então instalar os pacotes a seguir.
sudo apt-get update
sudo apt-get install qgis python-qgis
Pronto só aguardar o fim da instalação.  Caso, você já tenha o QGIS instalado, basta mandar atualizar (sudo apt-get upgrade), mas certifique-se de que havia instalado o pacote 'python-qgis'.

Testando

Os arquivos utilizados para testar algumas versões podem ser baixados AQUI. Alguns arquivos estão zipados e algumas vezes possui um arquivo complementar que contem um estilo pre-definido para visualização no QGIS (.qml). Basta descompactar os dois arquivos e deixá-los juntos que o QGIS irá reconhecer o estilo automaticamente Vamos testar o seguinte:
  1. Abrir dois tipos de arquivo .nc
  2. Abrir uma imagem ASTER, extensão .hdf
  3. Abrir um arquivo vetorial de extensão do google earth, .kml/.kmz
  4. Testar um algoritmo/processamento do GRASS diretamento do QGIS

1. Arquivo .nc (dois tipos)


  1. Dado de clorofila na extensão .nc ('csm_20100204_ag.nc'). Para abri-lo basta adicioná-lo como um raster. O arquivo não possui informação de projeção e portanto o QGIS irá perguntá-lo qual sistema de coordenadas utilizar, selecione o EPSG 4326.
  2. Dados de TSM global produto do OSTIA disponível ('20140126-UKMO-L4HRfnd-GLOB-v01-fv02-OSTIA.nc'). Este é um outro arquivo .nc que contem mais de uma variável (TSM analisada, erro, lat, lon, etc). Sugestão: selecione 'analysed_sst'. Mais produtos desta fonte podem ser baixados aqui.

2. Imagem ASTER

Abrir a imagem ASTER que está zipada no arquivo 'img_ASTER.zip' ('AST_L1B_00302132004142045_20140704092205_28017.hdf'). Imagem ASTER é um pouco chato de abrir diretamento no QGIS, talvez haja um jeito mais fácil, mas eu ainda não pesquisei a respeito. Outra solução é abrir em outro programa de processamento digital de imagem,GRASS por exemplo, e de lá exportá-lo (já com uma composição rgb). Ao tentar abrir, você será perguntado qual banda deseja adicionar. Para fim de teste, selecione apenas a banda 3N. Por padrão o QGIS não projeta corretamente a imagem, apesar de ler e entender a SRC da imagem. É necessário usar a ferramenta projetar/reprojetar a imagem:

  1. Selecione a ferramenta Raster>Projections>Warp (Reproject)
  2. De um nome de saída para a imagem
  3. em 'source srs' você deverá selecionar o mesmo sistema de referencia que o QGIS reconheceu da ASTER. Neste exemplo é USER:100003 
  4. como 'target srs' você deve escolher a projeção UTM e mesma zona da imagem. Repare que no próprio nome do SRS detectado pelo QGIS consta qual é a zona. No nosso caso é UTM 19S
  5. selecione para que a imagem seja carregada na tela.
Pronto. Para facilitar carregue a camada do google open layers (se ainda não tem o plugin instalado, é só instalá-lo Plugins>Manage and Install plugins) a ferramenta fica em Web>OpenLayers plugin>Google Maps>Google Satellite.

3. Arquivo .kml/kmz


Arquivos .kmz/kml são abertos como vetores. E na hora de selecionar o arquivo é necessário no filtro de extensões selecionar para mostar 'All files' ou 'Keyhole Markup Language [KML]. Abra o arquivo 'Geleira_Grey.kmz'. Este vetor é um ponto sobre a Geleira Grey na Patagônia Sul.

4. Algoritmo GRASS

Vamos ao último teste. Descompacte os dois arquivos de 'landuse.zip'. Em um novo projeto carregue a imagem 'landuse_urb.tif'. Percebam que a imagem já foi carregada com um estilo pré-definido definido pelo arquivo 'landuse_urb.qml' que etava na mesma pasta. Nós iremos aplicar um filtro de moda sobre esta imagem classificada afim de eliminar alguns pixels isolados presentes em uma outra classe. Para as ferramentas do GRASS funcionarem diretamente no QGIS é necessário que tenhas habilitado o plugin 'GRASS'. Para visualizarmos todos os algoritmos disponíveis:

  1. Processing>Toolbox (um painel será aberto do lado direito)
  2. procure por 'r.neighbors' (caso tenha o grass7 instalado, tenha atenção em selecionar a ferramenta do grass6 e não do 7, pois o plugin de integração entre QGIS/GRASS ainda é para o grass6)
  3. 'Neighborhood oparation' selecione 'mode' (moda)
  4. 'Neighborhood size' - 9
  5. de um nome de saída para seu arquivo, de modo que fique fácil reconhecer depois, como 'landuse_urb_mode9.tif'
  6. Pronto. Com a imagem filtrada gerada. Copie o estilo da imagem original e cole na imagem filtrada.

Obrigado por lerem, e caso tenham alguma dúvida ou dica para compartilhar, por favor escrevam.






sexta-feira, 19 de setembro de 2014

Integração do PostgreSQL e R para Estimador de Densidade



Começando a aprender o versátil e completo software R, hoje consegui fazer uma pequena e simples rotina que quero compartilhar. Pessoalmente, escolhi o RStudio como interface (quase) gráfica para o R.

O objetivo é fazer de forma rápida mapas de densidade de ocorrência de um determinado evento.

É bem provável que eu não utilize um mapa como o demonstrado acima como produto final. Mas se apresentou como uma solução boa, bonita e barata para uma análise exploratória dos dados. Principalmente se eu quero fazer isto para 5 espécies e 295 saídas de campo. Não dá para fazer isto clicando no QGIS. O construtor de modelos do GRASS pode ser uma saída. Mas certamente esta solução no R foi a mais rápida.

Neste exemplo, utilizaremos o caso encalhes de tartarugas marinhas pelo litoral do Rio Grande do Sul. Nestes links, você pode ter mais informações sobre o Projeto Tartarugas no Mar e sobre o NEMA, instituição responsável pelo banco de dados de monitoramento de praia aqui utilizado.

Este procedimento será realizado em 7 passos:
  1. Carregar as bibliotecas necessárias;
  2. Conectar ao banco de dados;
  3. Criar as variáveis que serão utilizadas;
  4. Calcular o índice de densidade;
  5. Montar o raster de densidade;
  6. Plotar os dados e salvar a figura;
  7. Salvar o raster de densidade em GeoTIFF para abrir em outro software de SIG (QGIS, GRASS, GvSIG ou qualquer outro).
Então mãos à obra. Como dados de entrada, precisamos apenas de uma série de pontos (longitude e latitude) e de um shapefile para representar a divisão política e facilitar a compreensão dos resultados.

1. Bibliotecas:
library(sqldf) ##execução de sql
library(RPostgreSQL) ##conexão com Postgres
library(KernSmooth)
library(raster) ##construção de rasters
library(maps) ##importação de shapes e muitas outras funções de mapas
2.  Conexão com o PostgreSQL:
options(sqldf.RPostgreSQL.user="seu_usuario",
        sqldf.RPostgreSQL.password="sua_senha",
        sqldf.RPostgreSQL.dbname ="nome_do_bd",
        sqldf.RPostgreSQL.host ="localhost_ou_IP_do_servidor",
        sqldf.RPostgreSQL.port =5432)
3.  Criação das variáveis:

O sqldf permite você fazer qualquer consulta em SQL dentro do BD. Neste caso, selecionei apenas as colunas lat e lon da tabela de encalhes, para os registros do ano de 2013.
encalhes<- sqldf("select lon,lat from encalhes_2002p where extract ('year' from data)= 2013")
No caso da linha de costa, iremos carregar um shapefile:
costa <-shapefile('../divisao_politica.shp', stringsAsFactors=FALSE, verbose=FALSE) 
4. Cálculo do Índice de Densidade Kernel
dens <- bkde2D(encalhes, # nome da variável com lat, lon
              bandwidth=c(0.05,0.05), #maior distância de influência de cada ponto, neste caso em graus 
              gridsize=c(2000,2000), #número de linhas e colunas (resolução) do arquivo gerado
              range.x=list(c(-53.5,-50),c(-33.8,-31.2))) #coordenadas mínimas e máximas do cálculo
5. Transformando em raster

O caso é que o comando bkde2d gera uma lista com lon, lat e índice de densidade calculado. Portanto é necessário criar um raster, que irá ocupar menos memória e será mais efetivo.
dens.raster = raster(list(x=dens$x1, y=dens$x2, z=dens$fhat))
projection(dens.raster) <- CRS("+init=epsg:4326")# Sistema de Referência
xmin(dens.raster) <- -53.5 #Coordenadas do retângulo de extensão do raster
xmax(dens.raster) <- -50
ymin(dens.raster) <- -33.8
ymax(dens.raster) <- -31.2
6. Fazendo o plot:
 plot(dens.raster)
plot(costa, bg="transparent", add=TRUE)
Note que o parâmetro "bg" define que o background dos polígonos será transparente e o "add" que este plot deverá ser adicionado ao anterior, e não simplesmente gerado em uma nova figura

7. Se quiser salvar como figura, basta adicionar 1 linha antes e uma depois:
png("../heatmap_total.png", width=1000, height=1000)
plot(dens.raster)
plot(costa, bg="transparent", add=TRUE)
dev.off()
8. Se quiser salvar o kernel como GeoTIFF para utilizar em outros programas, basta:
writeRaster(../kern.tif',"GTiff",overwrite=TRUE) 

Extra: Agora, com todos os mapinhas padronizados, fica muito fácil fazer uma animação tratando cada mapa como um frame, e montando um gif. Um comando no terminal do Ubuntu:

convert -delay 100 -loop 0 heatmap*.jpg animation.gif