sábado, outubro 18, 2014

A Função row_number() em Consultas de Agregação Espacial

Em Banco de Dados, as funções de agregação são utilizadas para agrupar valores de acordo com um ou vários campos, agregando em uma única linha o conteúdo de vários registros. Dessa forma, os detalhes da informação original são postos de lado e as informações são tratadas em conjunto. São exemplos de funções de agregação: count(), sum(), max(), avg(), dentre outras. 

As funções de agregação também são empregradas em dados espaciais, é o caso da função ST_Union(), onde os vértices adjacentes da nova camada são dissolvidos a partir dos valores armazenados em um campo específico. 

Entretanto, para visualizar o resultado desta nova camada em um software de GIS ou de Webmapping, a maioria deles necessita que a camada tenha um campo com valores únicos. E é exatamente aí que a função row_number() se torna útil neste tipo de análise, permitindo gerar um campo “ID” (identificador único) a partir do número da linha dentro da consulta, de acordo com o “order by” informado. 

Para ilustrar o uso função row_number(), vejamos o exemplo a seguir (Figura 1). Utilizando o QGIS e uma camada de um BD Espacial PostGIS é realizada uma agregação dos municípios a partir do campo “meso” (mesorregiões do estado). 

Figura 1 - Consulta no DB Manager do QGIS

Desta forma, o campo id é criado e povoado através da função row_number() e o resultado pode ser visualizado no QGIS (Figura 2).

Figura 2 - Resultado em forma de mapa temático

Existem outras formas de se obter o mesmo resultado do campo id, neste tipo de situação, porém, o emprego da função row_number() é muito simples, como foi demonstrado no exemplo.

domingo, agosto 17, 2014

WMS GetFeatureInfo Utilizando MapServer e Leaflet

No Leaflet existem duas formas bem usuais de se obter os dados tabulares de uma feição através do clique do usuário em uma determinada camada. Uma delas é através do uso de marcadores (Markers), que é mais utilizada para a representação de pontos. A outra  é  o formato GeoJSON, que é uma excelente opção para exibir camadas de polígonos e de linhas neste aplicativo.

Porém, quando uma camada GeoJSON possui muitas feições ou uma grande quantidade de vértices, seu carregamento pode comprometer o desempenho do aplicativo. Uma saída para este problema é utilizar o formato WMS habilitando a requisição GetFeatureInfo como é mostrado no exemplo a seguir.

1 - Configuração do Mapfile como Servidor WMS:


A configuração do servidor WMS é feita através da definição dos itens obrigatórios para o seu funcionamento, a nível de MAP e de LAYER, definidos na documentação do MapServer no item "Setting Up a WMS Server Using MapServer". 



2 - Configuração do Template HTML para a requisição GetFeatureInfo:


Neste arquivo são definidos os dados que serão exibidos na janela de atributos através do GetFeatureInfo WMS Request. 


3 - Configuração do Leaflet:


Para habilitar esta funcionalidade  é necessário configurar a camada WMS no Leaflet, como é exibido a seguir:

Já com a função IDENTIFY abaixo, é possível associar ao clique do mouse uma requisição GetFeatureInfo, através da obtenção das variáveis BBOX, WIDTH, HEIGHT, X e Y. Com elas é definida a variável URL que fará esta requisição ao servidor WMS e trará o resultado de forma assíncrona com método $.ajax do jQuery.

A página HTML contendo o Leaflet fica então desta forma:


4 - Resultado:


Ao clicar em um município, é exibido uma janela contendo os atributos, como mostra a figura abaixo:


Você pode baixar os códigos deste exemplo neste link.

Sugestões de Leitura:


sexta-feira, junho 20, 2014

Instalação do i3Geo no Ubuntu 14.04

Estes dez passos te guiarão no processo de instalação do i3geo no Ubuntu 14.04.

1) Instalação do Mapserver

Para este primeiro item, realize os procedimentos descritos no post: Instalação do Mapserver no Ubuntu 14.04 via Terminal

2) Bibliotecas PHP necessárias para o funcionamento do i3geo:

$  sudo apt-get install libapache2-mod-php5 php5-common php5-curl php5-dev php5-gd php5-odbc php5-pgsql php5-ps php5-xmlrpc php5-xsl php5-sqlite php5-imagick php5-json

Em seguida, reinicie  servidor Apache:

$  sudo /etc/init.d/apache2 restart

3) Instalação do do Banco de Dados sqlite:

$  sudo apt-get install sqlite

4) Instalação do software estatístico R (item opcional)

$  sudo apt-get install r-base r-base-core r-cran-maptools r-cran-spatstat

5) Instalação do subversion (SVN)

$  sudo apt-get install subversion

6) Download do i3Geo

Para esta etapa, é necessário que você tenha uma conta no Portal do Software Público Brasileiro. Caso não possua, clique neste link: http://www.softwarepublico.gov.br/Registre-se e crie sua conta, em seguida digite no terminal:

$  svn checkout http://svn.softwarepublico.gov.br/svn/i3geo/i3geo/ /var/www/html/i3geo

e informe o seu email e senha cadastrada.

7) Altere as permissões do arquivo admin.db

$  sudo chmod -R 755 /var/www/html/i3geo/admin/admin.db

8) Crie a pasta ms_tmp dentro de /tmp

$  sudo mkdir /tmp/ms_tmp && sudo chmod -R 755 /tmp/ms_tmp

9) Crie um link simbólico dentro da pasta /var/www/html direcionando para /tmp/ms_tmp

$  sudo ln -s /tmp/ms_tmp /var/www/html/ms_tmp

10) Testanto a instalação:

Digite no browser: http://localhost/i3geo, você deverá ver uma tela semelhante a da figura abaixo. Caso ocorra algum erro, realize um teste de instalação através do link: http://localhost/i3geo/testainstal.php (usuário admin, senha admin).



Referência:

Instalação e Administração do i3Geo - guia do administrador

segunda-feira, junho 16, 2014

Perfil Longitudinal do Rio Principal Utilizando o GRASS e o R

Por definição, o perfil longitudinal de um rio apresenta a relação existente entre a variação altimétrica e o comprimento do mesmo, desde a nascente até a foz ou ponto de confluência.

Neste tutorial daremos continuidade ao post "Caracterização Morfométrica de Bacias Hidrográficas utilizando o GRASS" onde a partir do rio principal, será gerado o gráfico do perfil longitudinal do mesmo, utilizando o GRASS e o R.

Com o GRASS aberto no terminal, digite os comandos a seguir:

Como resultado, teremos o gráfico abaixo:


Referências:

sábado, maio 10, 2014

Aplicações WebGIS com o Laravel

Quem programa em PHP já deve conhecer ou ter ouvido falar sobre o Laravel. Uma coisa interessante neste framework é que é possível trabalhar com dados espaciais de forma muito prática.

O código abaixo exemplifica a implementação da classe Obra, que no PostGIS é uma tabela espacial do tipo POINT.

Primeiro criamos a migration:

Após rodarmos a migration, criamos o model Obras.php

No controller ObrasConrtoller.php, temos o método postCreate(), que recebe os dados de uma view onde são informadas as coordenadas x e y através de um formulário (ou de alguma aplicação Webmapping como mostra a Figura 1). Tais coordenadas são checadas através do método estático checkCoords($x, $y) do model Municipios.php. Este método faz a verificação das coordenadas informadas, que devem estar dentro dos limites do estado:

 
Figura 1 - Exemplo de View.

Embora o código aqui esteja bastante resumido, acredito que dá para se ter uma ideia do fluxo de trabalho neste framework, envolvendo dados espaciais. Qualquer dúvida ou melhoria no código serão bem vindas.

Um abraço e até a próxima o/