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/

sábado, abril 19, 2014

Instalação do Mapserver no Ubuntu 14.04 via Terminal


O Ubuntu 14.04 Trusty Tahr foi disponibilizado recentemente pela Canonical. Esta será uma versão LTS (Long Term Support) que terá suporte técnico durante 5 anos.

Neste tutorial demonstrarei como instalar o MapServer 6.4.1 nesta distribuição, utilizando o Terminal:

1 - Instalando o servidor Apache:

$  sudo apt-get install apache2

 

2 - Configurando as permissões do seu usuário na pasta de publicação:


Substitua a palavra "marcello" pelo nome do seu usuário:

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

 

3 – Instalando o PHP:

$ sudo apt-get install php5

 

4 – Instalando o Mapserver:

$ sudo apt-get install cgi-mapserver mapserver-bin php5-mapscript

 

5 – Habilitando o CGI no Apache:

$ sudo a2enmod cgi && sudo service apache2 restart

 

6 – Verificando a instalação do Mapserver CGI:


Abra o navegador e digite a url: http://localhost/cgi-bin/mapserv?, deverá surgir a seguinte mensagem:

No query information to decode. QUERY_STRING is set, but empty.

 

7 – Verificando a instalação do php-mapscript

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

Abra o navegador e digite a url: http://localhost/info.php, procure pela seguinte ocorrência:




That's all folks! Um abraço e até a próxima!

sábado, março 01, 2014

Mapas de relevo com a biblioteca GDAL

Elaborei um script utilizando as bibliotecas gdal e imagemagick para criar mapas de relevo com o efeito Hillshade. Para rodá-lo, basta colocá-lo em uma pasta (como mostra a Figura 1) com os arquivos SRTM baixados da site da Embrapa, junto com o shapefile contendo o limite da sua área de interesse e esta palheta de cores. Em seguida, é só digitar ./mosaic.sh

Figura 1 - Pasta contendo os arquivos necessários

Em função das cores definidas para cada cota no arquivo my_classes.ctp, o script cria um novo raster através do comando gdaldem (Figura 2).


Figura 2 - Imagem SRTM colorida

Em seguida é gerado o arquivo Hillshade (Figura 3).

Figura 3 - Relevo sombreado (Hillshade)

E os arquivos anteriores são unidos, como mostra a Figura 4.

Figura 4 - União do relevo sombreado com a imagem SRTM colorida

Por último, em função do limite do shapefile, o arquivo é "clipado". A Figura 5 mostra o resultado da utilização do script para o estado do Mato Grosso do Sul.

Figura 5 - Resultado da utilização do script para o MS.

Lembrando que para utilizar o script, é necessário lhe dar permissões de execução após baixá-lo, através do comando abaixo:
$ sudo chmod +x mosaic.sh

Referências:

quinta-feira, janeiro 16, 2014

Conversão de Tabelas Espaciais para o Formato GeoJSON Utilizando PHP

Neste exemplo irei utilizar o CodeIgniter para realizar a conversão de uma tabela espacial (rodovias) para o formato GeoJSON, utilizando MVC.

Primeiro deve-se criar um Model. Com a função geojson_output(), observem que a geometria da tabela é convertida para GeoJSON e reprojetada para WGS-84:


Em seguida o Controller, que vai receber os dados do Model e enviar para a View:


Por último a View, que renderiza os dados no formato GeoJSON:


Para ver os dados da tabela neste formato (Figura 1), é necessário acessar a url que contém o "controller/método" utilizado, no meu caso:
http://localhost/sirh/rodovias/geojson_link

Figura 1 - Resultado da conversão







Seguindo a documentação do Leaflet é bastante simples carregar os dados neste formato. O resultado pode ser conferido na Figura 2.

Figura 2 - GeoJson exibido na interface do Leaflet

terça-feira, dezembro 03, 2013

Caracterização Morfométrica de Bacias Hidrográficas utilizando o GRASS

A caracterização morfométrica tem como objetivo esclarecer várias questões associadas ao relevo e a dinâmica do escoamento superficial de uma bacia hidrográfica. Tal caracterização é feita com base nas principais medidas físicas e serve de instrumento para diversas aplicações relacionadas aos recursos hídricos.

Utilizando a extensão r.basin do GRASS, é possível extrair os atributos hidrológicos que compõem a caracterização morfométrica, para tanto, é necessário que o usuário informe a coordenada do exutório da bacia hidrográfica. Neste exemplo irei utilizar a imagem SRTM SB-24-Z-C como área de estudo.

1 - Convertendo o sistema de projeção da imagem SRTM para UTM


Utilizando o terminal, entre na pasta que contém a imagem e digite o seguinte comando:
$ gdalwarp -s_srs "EPSG:4326" -t_srs "EPSG:31984" SB-24-Z-C.tif dem.tif

Desta forma o raster será reprojetado para a projeção UTM Fuso 24 Sul (Datum SIRGAS 2000).

2 - Configurando a Location e o Mapset do GRASS


Abra o GRASS na janela do terminal (digitando "grass") e siga os próximos passos:

  • Escolha Location Wizard:

  • Defina o nome da Location e clique em next:

  • Na próxima tela, escolha a opção indicada abaixo:

  • Clique em "Browse" e procure o raster dem.tif:

  • Será exibida a tela de sumário, clique em "Finish"

  • No próximo passo, clique em "Yes":

  • Defina o nome do mapset e clique em "Start GRASS":



3 - Modificando as cores do Raster:


No terminal onde a sessão do GRASS está aberto, digite:
$ r.colors map=dem color=elevation

Para visualizar o resultado no  "Map Display", adicione esta camada através da opção "Add rast map layer" (Control + Shift + r):


4 - Preparando o MDE para a análise morfométrica:


Com o comando r.fill.dir são removidos os "sinks" (células cercadas por outras com maiores elevações), que produzem a descontinuidade do escoamento superficial descendente para uma célula vizinha.
$ r.fill.dir input=dem elevation=dem.filled direction=filled.dir


O próximo passo consiste em criar duas superfícies para análises hidrológicas através do comando r.watershed, são elas: a superfície de fluxo acumulado (accumulation) e a rede de drenagem matricial (streams).
$ r.watershed -fa elevation=dem.filled accumulation=accumulation \
stream=streams convergence=5 threshold=62

OBS: O threshold define o tamanho mínimo a ser considerado como uma área de contribuição para a bacia hidrográfica.
Para áreas de 0,5 km2 (500.000 m2) foi utilizado um valor igual a 62  (500.000 / 90x90), onde 90x90 é a resolução espacial de uma imagem SRTM).

5 - Instalando as extensões necessárias:


Instale uma a uma, as extensões a seguir:
$ g.extension extension=r.stream.angle
$ g.extension extension=r.stream.basins
$ g.extension extension=r.stream.del
$ g.extension extension=r.stream.distance
$ g.extension extension=r.stream.extract
$ g.extension extension=r.stream.order
$ g.extension extension=r.stream.pos
$ g.extension extension=r.stream.preview
$ g.extension extension=r.stream.stats
$ g.extension extension=r.ipso
$ g.extension extension=r.wf

E por último, a extensão r.basin:
$ g.extension extension=r.basin


6 - Realizando a caracterização morfométrica:


Deve-se escolher como coordenada do exutório um ponto que toque a rede de drenagem matricial, neste caso a coordenada escolhida foi a seguinte: (619.241,988946 E || 9.207.668,119428 N)
$ r.basin map=dem.filled prefix=out \ 
easting=619241.988946 northing=9207668.119428 threshold=62

7- Resultados:


O comando r.basin gera os seguintes resultados:

  • Layers: limite da bacia hidrográfica, rio principal, exutório e rede de drenagem da bacia:
  • Gráfico: Curva hipsométrica:

  • Planilha: é gerado um arquivo csv contendo o resultado da análise:


  • Saída no terminal: