bloco de notas

editado por eloi ribeiro

Categoria: sig

Delimitação Automática de Bacia Hidrográfica Usando Sextante no gvSIG a Partir de um MDE

Reblogged from Geoprocessamento para Linux:

Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post
  • Click to visit the original post

Depois de vários dias sem postar um tutorial aqui no blog Geoparalinux, retorno mostrando como delimitar uma bacia hidrográfica automaticamente a partir de um modelo digital do terreno usando a extensão Sextante no gvSIG.

Gostaria de deixar o registro de que o amigo Eliazer Kosciuk do blog Geo Idea Plus possui uma excelente série de 4 artigos com esta temática. Seria desnecessária e redundante de minha parte mostrar o método que ele utilizou (a partir de curvas de nível).

Ler mais… mais 842 palavras

Um bom artigo sobre delimitação de bacias hidrográficas com gvSIG+Sextante.

Urban Network Analysis on Vimeo

Urban Network Analysis on Vimeo on Vimeo.

Urban Network Analysis from City Form Lab on Vimeo.

Free and Open Source GIS Ramblings: QGIS Server on Ubuntu Step-by-step

via Free and Open Source GIS Ramblings: QGIS Server on Ubuntu Step-by-step.

Nathan Woodrow: Custom QGIS feature forms – Value Binding

SIG – Planet OSGeo

via Nathan Woodrow: Custom QGIS feature forms – Value Binding.

GeoSpatial Training Services – Español | Encuesta de salarios del Sector GIS

GeoSpatial Training Services – Español | Encuesta de salarios del Sector GIS.

Sampling points along a line with R « Scratching Surfaces

via Sampling points along a line with R « Scratching Surfaces.

A python layer action to open a wikipedia page in QGIS « Linfiniti Geo Blog

A python layer action to open a wikipedia page in QGIS « Linfiniti Geo Blog.

PerryGeo » Average Aspect

PerryGeo » Average Aspect.

Disparador (trigger) para actualizar automaticamente a área e o perímetro de geometrias em PostgreSQL

Nesta entrada vou explicar como criar um disparador para actualizar automaticamente a área e perímetro das geometrias de uma tabela em PostgreSQL. Para tal, vão-se utilizar as funções ST_Area() e ST_Perimeter() de PostGIS.

Nota: Onde está esquema deve ir o nome do esquema, onde está tabela o nome da tabela e onde está geom o nome do campo com a geometria.

As seguintes linhas são para criar os campos area e perimetro e preencher os campos. Utilizar uma das opções: UTM ou Geográficas, dependendo do sistema de coordenadas do tema.

ALTER TABLE esquema.tabela ADD COLUMN area bigint;
ALTER TABLE esquema.tabela ADD COLUMN perimetro bigint;
-- Coordenadas UTM
UPDATE esquema.tabela SET area = ST_area(geom)::bigint;
UPDATE esquema.tabela SET perimetro = ST_perimeter(geom)::bigint;
-- Coordenadas Geográficas
UPDATE esquema.tabela SET area = ST_Area(Geography(geom))::bigint;
UPDATE esquema.tabela SET perimetro = ST_Length(Geography(geom))::bigint;

Decidi utilizar o tipo bigint porque considero que os valores decimais não aportam informação útil para pequenas escalas e iriam ocupar mais espaço na tabela. No entanto, para escalas maiores e se interessa a exactidão, basta com mudar bigint por float.

Agora criamos a função que preenche automáticamente os campos area e perimetro cada vez que uma geometria é inserida ou modificada. Se anteriormente alteraste bigint por float, elimina ‘::bigint’ nas linhas 5 e 6. O resultado por defeito é do tipo float e já não é necessário fazer um cast.

CREATE OR REPLACE FUNCTION esquema.fun_area_perimetro()
  RETURNS trigger AS
$BODY$
BEGIN
NEW.area = ST_Area(NEW.geom)::bigint;
NEW.perimetro = ST_Perimeter(NEW.geom)::bigint;
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

O exemplo dado é para temas com sistemas de coordenadas em metros, como UTM. Se o tema está em geográficas e também se pretende o resultado em metros, deve ir assim:

CREATE OR REPLACE FUNCTION esquema.fun_area_perimetro()
  RETURNS trigger AS
$BODY$
BEGIN
NEW.area = ST_Area(Geography(NEW.geom))::bigint;
NEW.perimetro = ST_Length(Geography(NEW.geom))::bigint;
RETURN NEW;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;

Eliminamos o disparador no caso de que já exista um com o mesmo nome. Para passar a criar o disparador e indicar quando se deve executar e sobre que tabela.

DROP TRIGGER IF EXISTS trg_tabela_area_perimetro ON esquema.tabela;
CREATE TRIGGER trg_tabela_area_perimetro BEFORE INSERT OR UPDATE
ON esquema.tabela FOR EACH ROW EXECUTE PROCEDURE esquema.fun_area_perimetro();

Agora os valores de área e perímetro da tabela estarão sempre de acordo com a geometria.

Conversão de graus a metros

Um método simples e bastante preciso para converter graus a metros é conseguido utilizando uma consulta SQL em PostgreSQL + PostGIS. Como podemos ver nas seguintes consultas para distintas latitudes:

-- A quantos metros corresponde 1º no equador?
SELECT ST_Length( ST_Transform( ST_MakeLine( ST_SetSRID( ST_MakePoint(0,0),4326), ST_SetSRID( ST_MakePoint(-1,0),4326)),2040));
-- Resultado: 111382.856467237 metros = 111 Km aprox.

-- A quantos metros corresponde 1º em Valencia (39º lat)?
SELECT ST_Length( ST_Transform( ST_MakeLine( ST_SetSRID( ST_MakePoint(0,39),4326), ST_SetSRID( ST_MakePoint(-1,39),4326)),23030));
-- Resultado: 86641.9022522006 metros = 86,6 Km aprox.