Mostrando postagens com marcador Quantum GIS. Mostrar todas as postagens
Mostrando postagens com marcador Quantum GIS. Mostrar todas as postagens

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

sábado, julho 20, 2013

QGIS: cáculo da precipitação média pelo método de Thiessen

O cálculo da precipitação média em uma bacia hidrográfica é realizado através de dados coletados por pluviômetros que estão em áreas próximas e/ou dentro da mesma. Por definição a precipitação média é a lâmina d'água de altura uniforme sobre toda a área considerada, associada a um período de tempo.

O método de Thiessen é um dos mais usuais para a determinação da precipitação média, consiste em atribuir um fator de peso aos totais precipitados em cada pluviômetro, proporcionais a área de influência de cada um (VILLELA, 1975). Este método será demonstrado a seguir no Software Quantum GIS.

Na figura abaixo temos três layers abertos no QGIS, rainfall_gauges (estações pluviométricas com dados totais mensais de precipitação), streams (rede de drenagem) e basin (bacia hidrográfica em estudo).



Para criar os polígonos de Thiessen, acesse o menu Vector > Geometry Tools > Voronoi Polygons:



Escolha a camada dos postos pluviométricos, se necessário aplique um buffer para que o layer gerado cubra toda a bacia:



Em seguida corte o layer criado em função do limite da bacia. Vá em Vector > Geoprocessing Tools > Clip:



Em Input vector layer escolha o layer dos polígonos de Thiessen e em Clip layer escolha a bacia hidrográfica:


Com as áreas de influência dos postos pluviométricos definidas (figura abaixo), serão criados alguns campos na tabela de atributos.



Habilite o modo de edição e clique em Open field calculator:


Crie o campo area_km2, neste caso os dados estão em UTM e para obter os resultados em km2 deve-se dividir por 1.000.000. Salve o resultado e saia do modo de edição.


Em seguida, vá em Vector > Analysis Tools > Basic statistics:



Obtenha as estatísticas do Layer basin_thiessen, deve ser anotado o valor da soma das áreas (Sum = 3179.0643), que corresponde a área total da bacia.


Habilite o modo de edição mais uma vez para o layer thiessen_basin e crie mais um campo (area_per) contendo o valor da área de cada polígono dividida pela área total da bacia, em seguida salve a edição:


O último campo a ser criado armazenará o valor da precipitação ponderada (rainfall_p), obtido a partir da multiplicação dos valores dos campos rainfall_m e area_per, em seguida salve as alterações e saia do modo de edição:



Para obter o valor da precipitação média, acesse o menu Vector > Analysis Tools > Basic statistics e escolha o campo rainfall_p:


Em Sum temos o resultado para a precipitação média mensal, que é de 24,72 mm.

O mesmo procedimento pode ser realizado no GRASS através dos comandos abaixo:

Referências:

VILLELA, sm; MATOS, A. Hidrologia aplicada. 1975.

quarta-feira, fevereiro 27, 2013

Georreferenciamento de dados vetoriais usando o R e o PostGIS

Quem já trabalhou com o ArcGIS provavelmente já deve ter utilizado a extensão Spatial Adjustement que permite o ajuste de bases vetoriais distintas a partir de pontos de controle (conhecido como georreferenciamento de vetores). Neste tutorial irei apresentar uma solução semelhante utilizando a função ST_Affine do PostGIS e o software estatístico R.

Na Figura 1 temos duas camadas vetoriais, a de cor vermelha teve problemas no seu georreferenciamento e será ajustada a partir da base de cor verde. Para isso, primeiro é necessário  importar os shapefiles para um banco de dados geográfico e depois visualizar as tabelas criadas no QGIS:

Figura 1 - Bases cadastrais levantadas por empresas diferentes
Devem ser criadadas duas camadas vetoriais do tipo ponto no BDG onde foram importados os shapefiles. Observa-se na Figura 2 que a localização dos pontos vermelhos correspondem aos pontos verdes (origem -> destino).

Figura 2 - Pontos de controle criados
Em  seguida, em uma sessão no R via terminal deve-se digitar os seguintes comandos:
#carregando a biblioteca e o driver do PostgreSQL
library(RPostgreSQL)
drv <- dbDriver("PostgreSQL")
#conexão com o BD
con <- dbConnect(drv, dbname="cadastro", 
                 user="marcello", 
                 pass="<minha_senha>")
#query 1 - coordenadas x,y dos pontos de destino
pts_ok <- data.matrix(dbGetQuery(con, 
                "SELECT ST_X(geom) AS x,
                 ST_Y(geom) AS y 
                 FROM pontos_ok"))
#query 2 - coordenadas dos pontos de origem
pts_err <- data.matrix(dbGetQuery(con, 
                "SELECT ST_X(geom) AS x,  
                 ST_Y(geom) AS y 
                 FROM pontos_errados"))
#regressão linear: modele pts_ok 
#como função estatística de pts_err 
parameters <- lm(pts_ok ~ pts_err)
#visualizando a matriz transposta dos coeficientes
t(coef(parameters))

Como resultado, teremos os coeficientes da equação que lineariza os pontos com as coordenadas erradas (pts_err) em função dos pontos de referência (pts_ok).
 (Intercept)  pts_errx  pts_erry
x   1312943.9 1.0138267 -0.143060
y   -163870.4 0.1389882  1.013313
Tais coeficientes são os parâmetros de entrada da função ST_Affine:
Formato de saída no R:
   | xoff a b |
   | yoff d e |

Formato de entrada no PostGIS:
 ST_Affine(geom, a, b, d, e, xoff, yoff)

Por último, são executadas as seguintes instruções no BDG:
--criação de uma cópia da tabela errada:
CREATE TABLE lotes_corrigidos AS
SELECT * FROM lotes_errados;

--em seguida o georreferenciamento dos lotes:
UPDATE lotes_corrigidos
SET geom =  
ST_Affine(geom, 
  1.0138267, -0.143060, 
  0.1389882, 1.013313, 
  1312943.9, -163870.4);

Finalizando, a Figura 3 mostra o resultado da base corrigida, o resultado foi satisfatório considerando a quantidade de pontos utilizada:

Figura 3 - Resultado do georreferenciamento (lotes_corrigidos)

terça-feira, fevereiro 19, 2013

PostGIS: Triggers e Procedures (Parte 2)

Complementando o post anterior, imagine o seguinte cenário: um mapa que mostre de forma esquemática, adutoras que serão projetadas para abastecer alguns municípios. Neste caso o objetivo é ter uma ideia dos comprimentos das adutoras (representados pela distância entre as sedes municipais), quantidade de municípios abastecidos e o nome dos mesmos.
CREATE TABLE adutoras (
 gid serial PRIMARY KEY,
 nome_adutora varchar(50),
 -- campo alimentado pela trigger
 comp_trecho_km numeric(10,3),
 -- campo alimentado pela trigger
 qtde_municipios_abast int,
 -- campo alimentado pela trigger
 municipios_abastecidos varchar(400)
 );

-- adição do campo geom
SELECT AddGeometryColumn (
 'public',
 'adutoras',
 'geom',
 '4291', --Lat/Long - Datum SAD69
 'LINESTRING',
 2
 );

-- Procedure
CREATE OR REPLACE FUNCTION pipeline_geometry_field()
RETURNS trigger AS
$$
BEGIN
SELECT string_agg(municipios.nome,', ')
INTO NEW.municipios_abastecidos
FROM municipios
WHERE ST_Intersects(NEW.geom, municipios.geom);

SELECT COUNT(municipios.*) 
INTO NEW.qtde_municipios_abast
FROM municipios
WHERE ST_Intersects(NEW.geom, municipios.geom);

NEW.comp_trecho_km:=ST_Length(Geography((NEW.geom))/1000);

RETURN NEW;
END;
$$
LANGUAGE 'plpgsql';

-- Trigger
CREATE TRIGGER fill_pipeline_geometry_field
BEFORE INSERT OR UPDATE ON adutoras
FOR EACH ROW EXECUTE PROCEDURE pipeline_geometry_field();

O vídeo a seguir mostra a implementação do código acima, a partir da edição da tabela adutora no QGIS, observa-se o preenchimento automático dos campos após o salvamento da feição no Banco de Dados:

sábado, novembro 24, 2012

Geocodificação e Geocodificação Reversa no QGIS


A Geocodificação é o processo de conversão de endereços (ex: Rua Augusta, 2862 - Jardim América, São Paulo) em coordenadas geográficas (X,Y). Já a Geocodificação Reversa permite que você encontre um endereço a partir de uma coordenada informada.

Através do plugin GeoCoding no Quantum GIS é possível realizar os dois processos, da seguinte forma:

1- Abra o instalador de plugins do QGIS:




2- Digite a palavra geocoding e em seguida clique em Install plugin:



3- Se a instalação for bem sucedida, clique em OK na próxima janela:

 

4- É necessário definir o sistema de referência antes de utilizar o plugin, caso não tenha feito, digite Control+Shift+P para abrir a próxima janela. Neste exemplo, foi utilizado o EPSG:29195:




5- No menu Plugins, escolha a opção Geocode -> Geocode:



6- Digite o endereço que você quer geocodificar (ex: Av. Rio Grande do Sul, 40, Bairro dos Estados, João Pessoa):

 7- Se o endereço for encontrado, uma nova camada será criada (GeoCoding Plugin Results), contendo o ponto geocodificado:



8- Para realizar a geocodificação reversa, escolha a opção Geocode -> Reverse GeoCode no menu Plugins:




9 - Clique no local em que se deseja obter o endereço:




10- Se o endereço for encontrado, surgirá uma janela com o resultado, clique em OK:



11- Será criada uma feição pontual, contendo o endereço encontrado:




Espero que seja útil, até a próxima! o/