quarta-feira, dezembro 22, 2010

Análise Espacial com o PostGIS e o GvSIG

Uma das inúmeras vantagens de se trabalhar com o PostGIS é a possibilidade de criar views das análises espaciais, tornando os resultados das análises dinâmicas em função dos dados de entrada utilizados. Desta forma também evita-se a criação de novo layers em função de uma atualização da base.

Para exemplificar, vamos imaginar a seguinte situação: em uma determinada cidade foi definido que a área de influência de uma parada de ônibus é de 40 metros e que a prefeitura deve identificar quais são os lotes dentro de cada área de influência das paradas. Apesar da situação ser muito comum para quem já trabalha com SIG, surge a necessidade de se repetir a análise a cada nova parada inserida ou excluída no sistema, o que pode acabar gerando inconsistências na base em função do mal gerenciamento destes arquivos.

Com o uso do PostGIS e do GvSIG eu vou mostrar como resolver este problema sem a necessidade de ficar criando novas camadas a partir das análises desse problema, no caso, a criação do buffer de 40 metros e a consulta espacial (intersects).

No PgAdmin 3, crie um novo Banco de Dados Espacial com o nome cadastro (Figura 1), em seguida, baixe, descompacte e carregue no banco criado o arquivo SQL do link abaixo (Figura 2):

Figura 1 - Criação do Banco de Dados Espacial

Figura 2 - Carregando o Script SQL da tabela Lote


Agora vamos criar a tabela ponto_onibus a partir do script abaixo (Figura 3):
CREATE TABLE ponto_onibus(
 id serial PRIMARY KEY,
 observacao varchar(50)
 );

SELECT AddGeometryColumn (
 'public', -- esquema
 'ponto_onibus', -- nome da tabela
 'the_geom', -- nome da coluna
 '29185', -- SRID
 'POINT', -- tipo de geometria
 2 -- plano (2d)
 );
 


Figura 3 - Criação da tabela ponto_onibus no PgAdmin

Vamos criar duas views, uma para os buffers de 40 metros em torno das paradas de ônibus e a outra dos os lotes que estão dentro desta distância (função intersects).

-- Criando a view buffer_ponto_onibus
CREATE OR REPLACE VIEW buffer_ponto_onibus AS
SELECT id, buffer(the_geom, 40) AS the_geom 
FROM ponto_onibus;

-- Registrando a view na tabela de metadados geometry_columns
INSERT INTO geometry_columns(f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, "type")
VALUES ('', 'public', 'buffer_ponto_onibus', 'the_geom', 2, 29185, 'POLYGON');

-- Criando a view lotes_ponto_onibus
CREATE OR REPLACE VIEW lotes_ponto_onibus AS
SELECT l.*
FROM lote l,  buffer_ponto_onibus b
WHERE intersects(l.the_geom, b.the_geom);

-- Registrando a view na tabela de metadados geometry_columns
INSERT INTO geometry_columns(f_table_catalog, f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, "type")
VALUES ('', 'public', 'lotes_ponto_onibus', 'the_geom', 2, 29185, 'POLYGON');
 

Abra o GvSIG e mude a projeção do bloco para 29185 (Figura 4)

Figura 4 - Troca do sistema de projeção no GvSIG

Com o bloco aberto, clique no botão adicionar plano de informação e escolha a segunda aba (GeoDB), em seguida configure a conexão com o banco de dados "cadastro" (Figura 5).

Figura 5 - Configuração da conexão com o Banco de Dados

Configurada a conexão, adicione as tabelas "lote" e "parada_onibus" e as views "buffer_ponto_onibus" e "lotes_ponto_onibus" (Figura 6).

Figura 6 - Adicionando as camadas do BD

Inicie a edição da camada ponto_onibus clicando com o botão direito em cima desta camada e escolhendo a opção "Iniciar Edição" em seguida, adicione algumas paradas de forma aleatória. Termine a edição Salvando as alterações (Figura 7).

Figura 7 - Inserindo os pontos de ônibus
Para ver as modificações nas dias views, basta desligar e ligar uma das camadas  "buffer_ponto_onibus" ou "lotes_ponto_onibus" (Figura 8).

Figura 8 - Resultado dinâmico das análises a partir dos pontos criados

A cada novo ponto criado ou excluído, as duas views são atualizadas automaticamente (Figura 9).

Figura 9 - Resultado das análises após modificar a camada ponto_onibus

Esperam que tenham gostado dessa dica, até a próxima!

sexta-feira, dezembro 17, 2010

Alternativa Open Source para o ArcCatalog e o ArcToolbox

O wxGIS possui as mesmas características dos módulos ArcCatalog e ArcToolBox do ArcGIS, e o que é melhor, é open source :)





Para instalar o wxGIS no Ubuntu é necessário:

sábado, dezembro 04, 2010

PostrgeSQL - dados para realização dos exercícios



Baixe o arquivo neste link.

CREATE TABLE municipio (
idmun serial PRIMARY KEY,
nomemun varchar(50),
populacao int
);

CREATE TABLE proprietario (
idprop serial PRIMARY KEY,
cpf char(14),
nomeprop varchar(50),
telprop char(11)
);

CREATE TABLE fazenda (
idfaz serial PRIMARY KEY,
nomefaz varchar(50),
areafaz_ha numeric(8,2),
idmun int,
idprop int,
FOREIGN KEY(idmun) REFERENCES municipio (idmun),
FOREIGN KEY(idprop) REFERENCES proprietario (idprop)
);

CREATE TABLE variedade (
idvar serial PRIMARY KEY,
nomevar varchar(60)
);

CREATE TABLE plantacao (
idplan serial PRIMARY KEY,
plantio date,
colheita date,
areaplan_ha numeric(10,0),
idfaz int,
idvar int,
FOREIGN KEY(idfaz) REFERENCES fazenda (idfaz),
FOREIGN KEY(idvar) REFERENCES variedade (idvar)
);

-------------- INSERTS --------------
-------------------------------------

--TABELA municipio:
INSERT INTO municipio (nomemun, populacao) VALUES ('Patos', 100674);
INSERT INTO municipio (nomemun, populacao) VALUES ('Sousa', 65803);
INSERT INTO municipio (nomemun, populacao) VALUES ('Sapé', 50143);
INSERT INTO municipio (nomemun, populacao) VALUES ('Esperança', 31095);
INSERT INTO municipio (nomemun, populacao) VALUES ('Areia', 23829);
INSERT INTO municipio (nomemun, populacao) VALUES ('Bananeiras', 21851);

--TABELA proprietario
INSERT INTO proprietario (cpf, nomeprop,telprop ) VALUES ('027.424.624-91', 'João',    '83-87220485');
INSERT INTO proprietario (cpf, nomeprop,telprop ) VALUES ('011.122.234-51', 'Maria',   '83-99786654');
INSERT INTO proprietario (cpf, nomeprop,telprop ) VALUES ('123.455.009-98', 'Marcos',  '83-91230099');
INSERT INTO proprietario (cpf, nomeprop,telprop ) VALUES ('230.191.102-33', 'Rodrigo', '83-88998832');
INSERT INTO proprietario (cpf, nomeprop,telprop ) VALUES ('927.474.624-25', 'Carlos',  '83-88654321');

--TABELA fazenda
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Riacho Bonito',910, 1, 1);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Alegria',234, 2, 2);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Vida Bela',455, 3, 2);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Cascavel',1021, 6, 4);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Boquim',125, 4, 3);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Boi Só',782, 5, 5);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Giasa',1002, 2, 4);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Belo Monte',2304, 1, 2);
INSERT INTO fazenda (nomefaz, areafaz_ha, idmun, idprop ) VALUES ('Azulão', 234, 2, 2);

--TABELA variedade
INSERT INTO variedade (nomevar) VALUES ('Feijão');
INSERT INTO variedade (nomevar) VALUES ('Milho');
INSERT INTO variedade (nomevar) VALUES ('Cana de Açúcar');
INSERT INTO variedade (nomevar) VALUES ('Abacaxi');
INSERT INTO variedade (nomevar) VALUES ('Tomate');

--TABELA plantacao
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-08-10', '2013-01-02', 200, 1, 1);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-04-05', '2013-03-01', 520, 1, 2);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-11-30', '2013-02-24', 45, 2, 3);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-07-26', '2013-04-04', 20, 2, 4);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-06-05', '2013-01-02', 20, 3, 5);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-02-01', '2013-04-15', 900, 4, 3);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-04-23', '2012-11-21', 150, 6, 2);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-07-01', '2012-12-12', 120, 6, 3);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-11-20', '2013-02-10', 56, 8, 2);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-04-01', '2013-06-02', 590, 8, 3);
INSERT INTO plantacao (plantio, colheita, areaplan_ha, idfaz, idvar) VALUES ('2012-06-01', '2013-05-12', 345, 8, 4);