domingo, abril 10, 2016

Geoserver: importação de arquivos SLD gerados pelo QGIS

O SLD (Styled Language Descriptor) é responsável pela estilização dos layers no GeoServer, trata-se de um arquivo XML baseado nas especificações da OGC.

Neste post será demonstrado como gerar arquivos SLD a partir do software QGIS. Para tanto, utilizaremos uma tabela espacial representando o mapa de uso e cobertura da terra do estado de São Paulo (Figura 1), armazenada em um Banco de Dados Espaciais (PostgreSQL/PostGIS).

Figura 1 - Mapa Temático no QGIS







1 - Criação do SLD no QGIS:


Em propriedades da camada (Layer Properties), defina a simbologia de cada classe da sua camada, como mostra a Figura 2.


Figura 2 - Definição da simbologia


























Em seguida, exporte o arquivo de estilos criado para para o formato SLD (Figura 3), com o nome "uso_ocupacao_solo_solo.sld."


Figura 3 - Exportação para SLD
















2 - Configuração do arquivo SLD no GeoServer:


Em Style Editor adicione um name e um Workspace ao seu arquivo SLD, na sequência, abra o arquivo uso_ocupacao_solo_solo.sld com algum editor de texto. Copie e cole o SLD para a janela do GeoServer (Figura 4). Obs: não utilize a opção de upload, pois a mesma pode gerar inconsistências no seu arquivo.


Figura 4 - Configuração do SLD no Geoserver






























Para adicionar o estilo ao seu layer, vá até a aba Edit Layer, na opção WMS Settings e escolha o SLD criado, como mostra a Figura 5.


Figura 5 - Adição do estilo criado à camada.























3 - Resultado no Leaflet:


Crie um arquivo html com o contendo o código a seguir:


O resultado pode ser visto na Figura 6.

Figura 6 - Leaflet consumindo a camada WMS com o SLD criado





quarta-feira, julho 15, 2015

Análises Espaciais com o PostGIS Raster - Parte 2

Na postagem anterior, vimos como fazer a conversão e importação de um arquivo raster para um Banco de Dados Espaciais.

A seguir serão demostradas algumas consultas e análises com os dados da tabela uso_ocupacao_solo.

1) Obtendo Metadados


Para visualizar os metadados de um registro da tabela raster, podemos utilizar a seguinte consulta:


Como resultado, são exibidos diversos valores, tais como: coordenadas do canto superior (esquerdo e direito), tamanho do pixel, SRID , número de bandas, valores NODATA, dentre outros exibidos na Figura 1.

Figura 1 - Obtendo Metadados






Outro dado importante é o espaço ocupado pela tabela no HD, obtido através da seguinte consulta:


2) Interseção da Tabela Raster com um Município


Exemplo: gerar uma nova tabela a partir do recorte (clip) do uso e ocupação do solo em função dos limites do município de Ibitinga (Figura 2).

Por padrão, operações que geram novas geometrias envolvendo tabelas de diferentes tipos (raster/vetor) geram vetores a partir da poligonização do raster. A Figura 2 mostra o resultado da tabela criada no QGIS:

Figura 2 - Clip entre a tabela raster e o município de Ibitinga























As dimensões de cada polígono desta tabela são equivalentes a resolução espacial do raster, definido na importação com o comando raster2pgsql.

3) Quantificando o Resultado


Exemplo: qual é a área total de cada classe de uso no município de Ibitinga, em hectares?

O resultado da consulta pode ser visto na Figura 3:

Figura 3 - Área total de cada classe de uso



Também é possível realizar esta mesma consulta no terminal e exportar o resultado para CSV, através do comando:
$  psql sp -c  "copy ( SELECT dn, SUM(ST_Area(geom::geography)) / 10000 AS area_ha FROM uso_ocupacao_ibitinga GROUP BY dn ORDER BY dn ) to STDOUT WITH CSV" -o sum.csv

4) Análise de Buffer


Exemplo: determinar o uso e ocupação do solo para um buffer com raio de 500 metros, em torno do rio formado pelos trechos com os seguintes gids: 8530, 8560, 8561, 8562, 8578, 8590, 8591, 8592,8595 (Figura 4).

Figura 4 - Trechos que compõem o rio a ser analisado

Desta forma podem ser analisadas as classes de uso e ocupação do solo que estão dentro do buffer. O resultado pode ser visto na Figura 5:

Figura 5 - Resultado do buffer com as classes de uso e ocupação do solo




quarta-feira, julho 08, 2015

Análises Espaciais com o PostGIS Raster - Parte 1


O projeto PostGIS Raster possibilita o armazenamento e manipulação de dados matriciais em Banco de Dados Espaciais através da linguagem SQL.

Nesta série de tutoriais, serão demonstradas algumas funcionalidades desta extensão através da utilização dos dados de uso e ocupação do solo da mesorregião de Aracicaba (SP) e adjacências. Os dados podem ser obtidos através deste link: http://ge.tt/1Hye7zJ2/v/0?c

Caso você ainda não tenha o PostgreSQL e o PostGIS instalados no Ubuntu, este post descreve o processo: Instalação do PostGIS 2.0 no Ubuntu via Terminal

1) Criação do Banco de Dados Espaciais


Com o terminal aberto, entre com o comando:

$ createdb sp

Uma vez criado o Banco de Dados, deve-se então habilitar a extensão PostGIS no mesmo:

$ psql sp
psql (9.4.4)
Type "help" for help.

postgis=# CREATE EXTENSION postgis;

Digite \q para sair do Banco de Dados.

2) Conversão do arquivo Raster para SQL


Para realizar a conversão, abra o terminal e navegue até o diretório onde o arquivo uso_ocupacao.tif se encontra, em seguida, execute o seguinte comando:
$  raster2pgsql -s 4326 -I -M -C uso_ocupacao.tif -F -t 30x30 uso_ocupacao_solo > uso_ocupacao_solo.sql

Cada flag, que são as letras iniciadas com um "-" determina uma propriedade no arquivo sql que é gerado, neste caso em específico, temos:
  • -s : sistema de referência espacial do raster (SRID 4326)
  • -I: cria um índice GiST na coluna do raster
  • -M: adiciona um "Vacuum analise" ao script
  • -C: cria as constraints da tabela raster
  • -F: adiciona uma coluna com o nome do arquivo
  • -t 30×30: resolução espacial do raster

Outras opções sobre as flags e sobre o raster2pgsql  podem ser encontradas no link:


Agora é possível carregar todos os arquivos no Banco de Dados (municipios.sql, hidrografia.sql e uso_ocupacao_solo.sql) através de um único comando:

$  for f in *.sql; do psql -f $f -d sp; done

3) Visualização das tabelas no QGIS:


Uma vez configurada a conexão entre o QGIS e o Banco PostGIS, através do plugin DB Manager podemos então visualizar as tabelas do tipo raster, como mostra a Figura 1:

Figura 1 - Com o botão direito do mouse é possível escolher a opção "Add to canvas"

Para melhor representação visual da tabela, clique com o botão direito no layer e em "Properties -> Style" realize o ajuste exibido na Figura 2:

Figura 2 - Ajuste das cores do mapa temático

A Figura 3 mostra como deve ficar o resultado no QGIS.

Figura 3 - Mapa de uso e ocupação do solo

No próximo post demonstrarei algumas consultas e análises espaciais úteis utilizando os dados desta tabela, através da linguagem SQL... até breve :)

sábado, abril 18, 2015

Instalação do Laravel 5 no Ubuntu 14.10

O framework Laravel é atualmente um dos mais bem conceituados no mundo PHP. Isso se dá não apenas por conta do seu código limpo e elegante, mas também pela suave curva de aprendizado, recursos oferecidos, facilidade de uso e uma boa documentação.

Neste post, será demonstrado a instalação do mesmo no Ubuntu 14.10 utilizando o Terminal. Alguns pacotes e configurações descritos são opcionais, principalmente para quem não trabalha com desenvolvimento Webmapping.

1) Atualizando o Ubuntu:

$  sudo apt-get update && sudo apt-get upgrade -y

2) Servidor Apache

$  sudo apt-get install apache2

Em seguida, deve-se configurar as permissões do seu usuário na pasta de html. Substitua a palavra "marcello" pelo nome do seu usuário:

$  sudo adduser marcello www-data
$  sudo chown marcello:www-data -R /var/www/html
$  sudo chmod 755 -R /var/www/html


 3) PHP 5

$  sudo apt-get install php5

Criação o arquivo info.php dentro do diretório /var/www/html:

$  cd /var/www/html/
$  touch info.php
$  echo '<?php phpinfo(); ?>' >> info.php

Abra o browser e verifique a instalação: http://localhost/info.php

4) PostgreSQL / PostGIS (opcional)

$  sudo apt-get install postgresql-9.4-postgis-2.1 pgadmin3

Troque o seu usuário para o usuário postgres com os comandos:

$  sudo su
$  su postgres
$  postgres@ubuntu:/home/marcello$ createuser -s <seu_usuario> -P

5) Módulo PostgreSQL para o PHP 5

$  sudo apt-get install php5-pgsql

6) Extensão Mcrypt

$  sudo apt-get install php5-mcrypt
$  sudo php5enmod mcrypt
$  sudo service apache2 reload

7) Habilitando o mod_rewrite

$  sudo a2enmod rewrite
$  sudo service apache2 restart

Abra o arquivo:

$  sudo nano /etc/apache2/sites-available/000-default.conf

Procure por “DocumentRoot /var/www/html” e adicione as linhas a seguir logo abaixo:

<Directory "/var/www/html">
AllowOverride All
</Directory>

Saia do nano digitando control x, confirme as modificações (y) e por último tecle ENTER. Reinicie o servidor novamente:

$  sudo service apache2 reload

8) Composer

$  sudo apt-get install curl
$  curl -sS https://getcomposer.org/installer | php
$  mv composer.phar /usr/local/bin/composer

9) Nosso primeiro projeto com o Laravel 5

Na pasta /var/www/html/, execute o comando abaixo para realizar a instalação do Laravel:

$  composer create-project laravel/laravel <nome-do-projeto> --prefer-dist

Neste exemplo,  o nome do nosso projeto será sirh. Em seguida entre na pasta e execute os comando a seguir:

$  cd sirh
$  sudo chmod -R 777 storage/
$  php artisan serve

Temos então a aplicação funcionando no endereço http://localhost:8000

10) Criando um Virtual Host (opcional)

Embora seja possível acessar o projeto atráves do comando anterior, eu particularmente prefiro acessar através de uma url com o seguinte formato http://nome-do-projeto.dev. Para isso é necessário configurar um Virtual Host, da seguinte forma:
$  cd /etc/apache2/sites-available
$  sudo touch sirh.dev.conf
$  sudo nano sirh.dev.conf

Coloque o conteúdo a seguir dentro do arquivo criado:

<VirtualHost *:80>
  ServerName sirh.dev
  DocumentRoot /var/www/html/sirh/public
   <Directory /var/www/html/sirh/public>
     Options Indexes FollowSymLinks
     AllowOverride All
     Require all granted
   </Directory>
</VirtualHost>

Saia do nano digitando control x, confirme as modificações (y) e por último tecle ENTER. Será necessário ativar o VirtualHost com o comando:

$  sudo a2ensite  sirh.dev.conf

Altere o arquivo de hosts...

$  sudo nano /etc/hosts

...adicionando a seguinte linha ao final do arquivo:

 127.0.0.1 sirh.dev

Por último, reinicie o servidor Apache:

$  sudo service apache2 reload

Acesse o link http://sirh.dev/, você deverá ver a página inicial do Laravel:



Caso não consiga chegar até aqui, entre em contato comigo, dúvidas e sugestões serão bem vindas.

Referências:

Documentação do Laravel:
http://laravel.com/docs/master

Iniciando um Novo Projeto no Laravel:
 http://magazine.softerize.com.br/tutoriais/php/laravel/iniciando-um-novo-projeto-laravel

sexta-feira, janeiro 02, 2015

Trabalhando com Formulários no QGIS

A criação de formulários personalizados no QGIS, é um recurso muito útil para o preenchimento dos campos de uma tabela de atributos. Vejamos então como isso funciona.

Neste exemplo será utilizada uma camada que representa os postes de iluminação pública de uma determinada área, com os seguintes campos (Figura 1):

Figura 1 - Campos da camada postes

Para cada campo deve ser criado um Alias, para facilitar o entendimento do usuário (Figura 2):

Figura 2 - Criação dos Aliases

O campo manutencao será definido como sendo do tipo "Check Box", onde 0 será o valor para os postes que ainda não foram revisados e 1 o valor para os postes revisados (Figura 3):

Figura 3 - Definição do campo manutencao como Check Box

Para campos do tipo Date, é possível adicionar calendários "popup" para o preenchimento dos seus valores. O campo data_manut exemplifica o processo (Figura 4):

Figura 4 - Definição do campo data_manut como Date/Time

Para valores fixos, onde é mostrado uma lista contendo valores predeterminados, utiliza-se a opção Value Map. Este tipo de entrada de dado é muito útil, pois evita possíveis erros de digitação. Os campos tipo_ilum (Figura 5) e cor_lampad (Figura 6) são exemplos do uso desse recurso:

Figura 5 - Lista de valores para o campo tipo_ilum

Figura 6 - Lista de valores para o campo cor_lampad

Já a opção Range é útil quando um campo deve receber um valor a partir de uma variação de números. Também é possível definir o incremento ou step. Para este exemplo, o campo qtde_lampa é configurado da seguinte forma (Figura 7):

Figura 7 - Definição do campo qtde_lampa

Também é possível utilizar o recurso conhecido como "autocomplete", onde a medida que o usuário digita, são sugeridos valores que foram armazenados anteriormente. Para isso, deve-se escolher a opção Unique Values. O campo tipo_poste será utilizado como exemplo, a seguir (Figura 8): 

Figura 8 - Habilitando o autocomplete no campo tipo_poste

Para o campo altura_pos mais uma vez é escolhida a opção Range, como mostra a Figura 9:

Figura 9 - Campo altura_pos

Por último, para o campo foto deve-se escolher a opção Photo,  dessa forma o QGIS exibirá uma miniatura da imagem escolhida (Figura 10).

Figura 10 - Campo foto


O RESULTADO:


Ao entrar em modo de edição, o usuário terá um formulário personalizado que ajudará a diminuir a entrada de inconsistências por digitação... e o que é melhor, isso foi feito sem escrever uma só linha de código (Figura 11). 

Figura 11 - Resultado do formulário