quinta-feira, maio 30, 2013

Script para criação de mapas de declividade no GRASS

O script a seguir cria um mapa de declividade a partir de um Modelo Digital de Terreno, de acordo com classificação proposta por Lepsch (1991), descrita na Tabela 1.

Classe de Declividade  Porcentagem
Plano 0 - 2
Suave Ondulado  2 - 5
Moderadamente Ondulado 5 - 10
Ondulado 10 - 15
Forte Ondulado 15 - 45
Montanhoso 45 - 70
Escarpado > 70
Tabela 1 - Classes de declividade (LEPSH, 1991)

#!/bin/sh
# Author: Marcello Benigno, May/2013; copyright: GPL >= 2
# Purpose: Create a reclass slope map
# Usage: ./declividade.sh
#-----------------------------------------------------------
#verifica se o GRASS está em execução:
if [ -z "$GISBASE" ] ; then
echo "ERRO: O GRASS não está em execução!"
exit 1
fi
echo -n "Digite o nome do layer raster (MDT): "
read _MTD
#verifica se o arquivo existe
g.findfile element=cell file="$_MTD" > /dev/null
if [ $? -eq 1 ] ; then
g.message -e "O layer $_MTD não foi encontrado neste mapset!"
exit 1
else
#definição da região da análise (dem SRTM):
g.region rast=$_MTD
#criação do mapa de declividade em porcentagem
r.slope.aspect --o elevation=$_MTD slope=slope format=percent
#reclassificação em função das classes de declividade
r.mapcalc <<EOF
class_1 = if(slope <= 2.0, 1, 0)
class_2 = if(slope > 2.0 && slope <= 5.0, 2, 0)
class_3 = if(slope > 5.0 && slope <= 10.0, 3, 0)
class_4 = if(slope > 10.0 && slope <= 15.0, 4, 0)
class_6 = if(slope > 15.0 && slope <= 45.0, 6, 0)
class_7 = if(slope > 45.0 && slope <= 70.0, 7, 0)
class_8 = if(slope > 70.0, 8,0)
slope.reclass = class_1 + class_2 + class_3 + class_4 + class_6 + class_7 + class_8
EOF
#eliminação das classes
g.remove --q rast=class_1,class_2,class_3,class_4,class_6,class_7,class_8
echo "------------------------------------------------"
echo "O Layer 'slope.reclass' foi criado com sucesso."
echo "------------------------------------------------"
fi
exit 0
view raw declividade.sh hosted with ❤ by GitHub
Para utilizar o script é necessário fazer o seu download (salve-o na pasta home, por exemplo) e lhe dar permissões de execução através do comando abaixo:
$ sudo chmod +x declividade.sh

Em seguida execute o comando dentro de uma sessão do GRASS:



Resultado:


REFERÊNCIAS:


LEPSCH, I. F. Manual para levantamento utilitário do meio físico e classificação de terras no sistema de capacidade de uso. Campinas : Sociedade Brasileira de Ciência do Solo, 1991.

sexta-feira, maio 24, 2013

Python: Geocodificação com a biblioteca pygeocoder

A biblioteca pygeocoder para a linguagem Python é uma mão na roda para quem precisa geocodificar com da API do Google. Com ela é possível encontrar as coordenadas de um determinado endereço, ou um endereço a partir de coordenadas conhecidas (x,y), processo conhecido como geocodificação reversa.

Vejamos como instalar e utilizar esta biblioteca:

1 - Instalação do Pip, que é um sistema de gerenciamento, usado para instalar e gerenciar pacotes de software escritos na linguagem de programação Python:
$ sudo apt-get install python-pip
2 - Instalação da biblioteca requests (caso seja necessário):
$ sudo pip install requests
3 - Instalação da biblioteca pygeocoder:
$ sudo pip install pygeocoder

4 - Obtendo as coordenadas a partir de um endereço:
from pygeocoder import Geocoder
endereco = Geocoder.geocode("Rua Violeta Formiga, 80, João Pessoa")
print(endereco[0].coordinates)
>>> (-7.0821068, -34.8407296)
print(endereco[0])
>>> Rua Violeta Formiga, 80 - Aeroclube, João Pessoa - Paraíba, Brazil

5 - Obtendo um endereço a partir das coordenadas:
coordenadas = Geocoder.reverse_geocode(-7.134660, -34.873325)
print(coordenadas[0])
>>> Avenida Primeiro de Maio, 792-866 - Jaguaribe, João Pessoa - Paraíba, 58015-430, Brazil