Você está na página 1de 7

COMANDOS AULA

CRIAR TABELA DE PONTOS

CREATE TABLE PONTO


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(POINT, 4618))

POPULAR TABELA DE PONTOS

INSERT INTO PONTO VALUES (1, 'PONTO1', ST_GeomFromText('POINT( 5 5 )', 4618))

INSERT INTO PONTO VALUES (2, 'PONTO2', ST_GeomFromText('POINT( 6 6 )', 4618))

CRIAR TABELA LINHA


CREATE TABLE LINHAS
( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(LINESTRING, 4618))

POPULAR TABELA DE LINHAS

INSERT INTO LINHAS VALUES (1, 'LINHA1', ST_GeomFromText('LINESTRING( 1 1, 5 5 , 3


4, 2 1 )', 4618))

INSERT INTO LINHAS VALUES (2, 'LINHA2', ST_GeomFromText('LINESTRING( 6 6 , 3 3, 1 1


)', 4618))

CRIAR TABELA DE POLIGONOS

CREATE TABLE POLIGONO


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(POLYGON, 4618))

POPULAR TABELA DE POLIGONOS

INSERINDO POLIGONO COM UMA LINHA

INSERT INTO POLIGONO VALUES (1, 'POL1', ST_GeomFromText('POLYGON(( 1 1, 1 2, 2 5, 5


1, 1 1))', 4618))

INSERINDO POLIGONO COM LINHA INTERNA

INSERT INTO POLIGONO VALUES (2, 'POL2', ST_GeomFromText('POLYGON((6 1, 6 4, 10 4,


10 1, 6 1), (8 2, 8 3 , 9 3 , 9 2 , 8 2))', 4618))

CRIAR TABELA MULTIPONTO

CREATE TABLE MULTIPONTO


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(MULTIPOINT, 4618))

POPULAR MULTIPONTO
INSERT INTO MULTIPONTO VALUES (1, 'MP1', ST_GeomFromText('MULTIPOINT( 1 1, 5 5 , 3
4, 2 1 )', 4618))

INSERT INTO MULTIPONTO VALUES (2, 'MP22', ST_GeomFromText('MULTIPOINT( 6 6 , 3 3, 1


1 )', 4618))

CRIAR TABELA MULTILINHAS

CREATE TABLE MULTILINHAS


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(MULTILINESTRING, 4618))

INSERT INTO MULTILINHAS VALUES (1, 'ML1', ST_GeomFromText('MULTILINESTRING(( 1 1, 5


5 , 3 4, 2 1 ) ,( 6 6 , 3 3, 1 1 )) ', 4618))

INSERT INTO MULTILINHAS VALUES (2, 'ML2', ST_GeomFromText('MULTILINESTRING(( 7 7, 3


3 ),( 1 1 , 2 5 , 7 7), (3 3 , 4 4 , 1 2))', 4618))

CRIAR TABELA MULTIPOLIGONOS

CREATE TABLE MULTIPOLIGONO


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(MULTIPOLYGON, 4618))

INSERT INTO MULTIPOLIGONO VALUES (1, 'MP1', ST_GeomFromText('MULTIPOLYGON((( 1 1, 5


5 , 3 4, 2 1, 1 1 )) ,(( 6 6 , 3 3, 1 1, 6 6 ))) ', 4618))

INSERT INTO MULTIPOLIGONO VALUES (2, 'MP2', ST_GeomFromText('MULTIPOLYGON(((6 1, 6


4, 10 4, 10 1, 6 1), (8 2, 8 3 , 9 3 , 9 2 , 8 2)), (( 1 1, 1 2, 2 5, 5 1, 1
1)))', 4618))

verificando a validade do poligono

select *
from multipoligono
where not st_isvalid(local)

CRIANDO COLE��O

CREATE TABLE SURUBA


( ID INTEGER PRIMARY KEY,
NOME VARCHAR(254),
LOCAL GEOMETRY(GEOMETRYCOLLECTION, 4618))

INSERT INTO SURUBA VALUES (1, 'SU1', ST_GeomFromText('GEOMETRYCOLLECTION(


MULTIPOLYGON(((6 1, 6 4, 10 4, 10 1, 6 1), (8 2, 8 3 , 9 3 , 9 2 , 8 2)), (( 1 1,
1 2, 2 5, 5 1, 1 1))),
LINESTRING( 1 1, 5 5 , 3 4, 2 1 ))',4618))

SELECT * FROM SURUBA

SELECT ID, NOME , ST_ASTEXT(LOCAL)


FROM SURUBA
Operadores Espaciais

ST_Contains - A (pol vermelho) Contem B (pol Azul)

SELECT ST_Contains(ST_GeomFromText('POLYGON((1 2, 1 7, 7 7, 7 2, 1 2))', 29183),


ST_GeomFromText('POLYGON((2 3, 2 6, 6 6, 6 3, 2 3))', 29183));

ST_Contains - A (pol vermelho) Contem B (pol Azul)

SELECT ST_Contains(ST_GeomFromText('POLYGON((9 2, 9 7, 15 7, 15 2, 9 2))', 29183),


ST_GeomFromText('POLYGON((10 4, 10 7, 14 7, 14 4, 10 4))',
29183));

ST_Within - A (pol vermelho) Esta dentro de B (pol Azul)

SELECT ST_Within(ST_GeomFromText('POLYGON((2 3, 2 6, 6 6, 6 3, 2 3))', 29183),


ST_GeomFromText('POLYGON((1 2, 1 7, 7 7, 7 2, 1 2))', 29183));

ST_Within - A (pol vermelho) Esta dendo de B (pol Azul)

SELECT ST_Within(ST_GeomFromText('POLYGON((10 4, 10 7, 14 7, 14 4, 10 4))', 29183),


ST_GeomFromText('POLYGON((9 2, 9 7, 15 7, 15 2, 9 2))', 29183));

ST_Covers - A (pol vermelho) Cobre B (pol Azul)

SELECT ST_Covers(ST_GeomFromText('POLYGON((1 2, 1 7, 7 7, 7 2, 1 2))', 29183),


ST_GeomFromText('POLYGON((2 3, 2 6, 6 6, 6 3, 2 3))', 29183));
ST_Covers - A (pol vermelho) Cobre B (pol Azul)

SELECT ST_Covers(ST_GeomFromText('POLYGON((9 2, 9 7, 15 7, 15 2, 9 2))', 29183),


ST_GeomFromText('POLYGON((10 4, 10 7, 14 7, 14 4, 10 4))',
29183));

ST_CoveredBy - A (pol vermelho) � Coberto por B (pol Azul)

SELECT ST_CoveredBy(ST_GeomFromText('POLYGON((2 3, 2 6, 6 6, 6 3, 2 3))', 29183),


ST_GeomFromText('POLYGON((1 2, 1 7, 7 7, 7 2, 1 2))', 29183));

ST_CoveredBy - A (pol vermelho) � Coberto por B (pol Azul)

SELECT ST_CoveredBy(ST_GeomFromText('POLYGON((10 4, 10 7, 14 7, 14 4, 10 4))',


29183),
ST_GeomFromText('POLYGON((9 2, 9 7, 15 7, 15 2, 9 2))', 29183));

ST_Touches - A (lin vermelho) toca B (lin Azul)

SELECT ST_Touches(ST_GeomFromText('LINESTRING(1 5, 1 7, 3 7)', 29183),


ST_GeomFromText('LINESTRING(3 5, 1 7)', 29183));
ST_Touches - A (lin vermelho) toca B (lin Azul)

SELECT ST_Touches(ST_GeomFromText('LINESTRING(4 5, 4 7, 6 7)', 29183),


ST_GeomFromText('LINESTRING(5 5, 5 8)', 29183));

ST_Touches - A (lin vermelho) toca B (lin Azul)

SELECT ST_Touches(ST_GeomFromText('LINESTRING(1 3, 3 4)', 29183),


ST_GeomFromText('LINESTRING(3 4, 5 3)', 29183));

ST_Touches - A (pol vermelho) toca B (pol Azul)

SELECT ST_Touches(ST_GeomFromText('POLYGON((1 0, 1 2, 4 2, 4 0, 1 0))', 29183),


ST_GeomFromText('POLYGON((4 0, 4 2, 7 2, 7 0, 4 0))', 29183));

: ST_Touches - A (pol vermelho) toca B (pol Azul)

SELECT ST_Touches(ST_GeomFromText('POLYGON((8 5, 8 7, 11 7, 11 5, 8 5))', 29183),


ST_GeomFromText('POLYGON((13 4, 11 6, 13 8, 15 6, 13 4))',
29183));

: ST_Touches - A (pol vermelho) toca B (pol Azul)

SELECT ST_Touches(ST_GeomFromText('POLYGON((9 1, 9 3, 12 3, 12 1, 9 1))', 29183),


ST_GeomFromText('POLYGON((13 2, 11 2, 13 3, 15 3, 13 2))',
29183));

Verificando a configura��o do PostGIS

SELECT postgis_full_version();

Criando uma tabela com coluna geom�trica (feature table ou tabela com fei��es)

CREATE TABLE estacoes_pluviometricas


(
gid INT4,
location GEOMETRY(POINT, 4618),
nome VARCHAR(25)
);

Inserindo dados em uma tabela com coluna geom�trica

INSERT INTO estacoes_pluviometricas


VALUES(1, ST_GeomFromText('POINT(-46.98 -19.57)', 4618), 'DINIZ-ARAXA');

INSERT INTO estacoes_pluviometricas


VALUES(2, ST_GeomFromText('POINT(-43.59 -20.37)', 4618), 'QUEIROZ-OURO-PRETO');

Recuperando os dados de uma tabela com coluna geom�trica na forma textual

SELECT gid, ST_AsText(location) FROM estacoes_pluviometricas

Consultando as views de metadado do PostGIS

SELECT * FROM spatial_ref_sys WHERE srid = 4618

SELECT * FROM geometry_columns WHERE f_table_name = 'estacoes_pluviometricas'

Recuperando os munic�pios que estejam a uma dist�ncia de 1 grau da coordenada (-


45.970095, -17.5110525)

SELECT nommuni, ST_AsText(geom) AS geom


FROM mg_municipios
WHERE ST_DWithin(geom, ST_GeomFromText('POINT(-45.970095 -17.5110525)', 4618),
1.0);

CREATE OR REPLACE VIEW V1 AS


SELECT gid, ST_Transform(geom,4618) AS geom
FROM mg_municipios
where ST_DWithin(geom, ST_GeomFromText( 'POINT(-45.970095 -17.5110525)', 4618),
1.0);

Quais os poligonos de aptidao agricola que interceptam a geometria do municipio de


�Jo�o Pinheiro� ?

--SELECT ST_Relate(ap.geom, mn.geom)


SELECT mn.nommuni, ap.classe, ap.geom, mn.geom
FROM mg_aptidao ap JOIN mg_municipios mn ON ST_Intersects(ap.geom, mn.geom)
WHERE nommuni = 'Jo�o Pinheiro';

ou

SELECT mn.nommuni, ap.classe, ap.geom, mn.geom


FROM mg_municipios mn, mg_aptidao ap
WHERE ST_Intersects(mn.geom, ap.geom) AND nommuni = 'Jo�o Pinheiro';

Como estao organizadas as areas de aptidao agricola do municipio de 'Jo�o


Pinheiro'?

SELECT mn.nommuni, ap.classe, ST_Intersection(ap.geom, mn.geom)


FROM mg_aptidao ap JOIN mg_municipios mn ON ST_Intersects(ap.geom, mn.geom)
WHERE nommuni = 'Jo�o Pinheiro';

CREATE TABLE aptidao_joao_pinheiro AS


SELECT mn.nommuni AS nome_municipio, ap.classe AS classe, ST_Intersection(ap.geom,
mn.geom) AS geom
FROM mg_aptidao ap JOIN mg_municipios mn ON ST_Intersects(ap.geom, mn.geom)
WHERE nommuni = 'Jo�o Pinheiro';

SELECT populate_geometry_columns('aptidao_joao_pinheiro'::regclass, FALSE);

ALTER TABLE aptidao_joao_pinheiro ADD COLUMN gid SERIAL;

ALTER TABLE aptidao_joao_pinheiro ADD CONSTRAINT aptidao_joao_pinheiro_pk PRIMARY


KEY (gid)

CREATE INDEX spidx_aptidao_joao_pinheiro ON aptidao_joao_pinheiro USING


GIST(geom);

Gerar o contorno do Estado da Bahia a partir do mapa de munic�pios da Bahia.

CREATE TABLE contorno_ba AS


SELECT 1 AS gid, ST_Union(geom) AS geom FROM ba_municipios;

SELECT populate_geometry_columns('contorno_ba'::regclass, FALSE);

ALTER TABLE contorno_ba ADD CONSTRAINT contorno_ba_pk PRIMARY KEY (gid)


Quais os munic�pios vizinhos a Salvador?

SELECT m1.nome_munic, m2.nome_munic, m2.gid, m2.geom


FROM ba_municipios m1,
ba_municipios m2
WHERE ST_Touches(m1.geom,
m2.geom)
AND m2.nome_munic <> 'Salvador'
AND m1.nome_munic = 'Salvador';

CREATE OR REPLACE VIEW B1 AS


SELECT m2.gid, ST_Transform(m2.geom,4674) as geom
FROM ba_municipios m1, ba_municipios m2
WHERE ST_Touches(m1.geom, m2.geom)
AND m2.nome_munic <> 'Salvador'
AND m1.nome_munic = 'Salvador';

Em qual munic�pio da Bahia foi detectado maior n�mero de focos?

EXPLAIN ANALYZE
SELECT m.gid, m.nome_munic, COUNT(*) AS num_focos, m.geom
FROM ba_municipios m, focos f
WHERE ST_Contains(m.geom, ST_Transform(f.geom, 4674))
GROUP BY m.gid, m.nome_munic
--ORDER BY num_focos DESC
--LIMIT 1;

EXPLAIN ANALYZE
SELECT m.gid, m.nome_munic, COUNT(*) AS num_focos, m.geom
FROM ba_municipios m, focos f
WHERE ST_Within(ST_Transform(f.geom, 4674), m.geom)
GROUP BY m.gid, m.nome_munic
--ORDER BY num_focos DESC
--LIMIT 1;

EXPLAIN ANALYZE
SELECT m.gid, m.nome_munic, COUNT(*) AS num_focos, m.geom
FROM ba_municipios m, focos f
WHERE ST_Within(f.geom, ST_Transform(m.geom, 4618))
GROUP BY m.gid, m.nome_munic
--ORDER BY num_focos DESC
--LIMIT 1;

Quais as �reas de terra ind�gena na Bahia?

SELECT m.gid, m.nome_munic, t.nometi


FROM ba_municipios m, terras_indigenas t
WHERE ST_Intersects(m.geom, t.geom)

Algum foco de inc�ndio foi detectado em terras ind�genas?

-- Obs.: experimentar uma ocnstrucao diferente para esta tabela


SELECT t.gid, MAX(nometi), COUNT(*) AS num_focos
FROM terras_indigenas t, focos f
WHERE ST_Contains(t.geom, ST_Transform(f.geom, 4674))
GROUP BY t.gid
Algum foco de inc�ndio foi detectado num raio de 1000 metros do trecho rodovi�rio
de c�digo GEODB_OID 17420?

CREATE OR REPLACE VIEW buffer_trecho AS


SELECT gid, ST_Transform(ST_Buffer(ST_Transform(geom, 29101), 1000, 8), 4618) AS
geom
FROM trecho_rodoviario
WHERE geodb_oid = 17420;

SELECT f.* FROM focos AS f, buffer_trecho AS b WHERE ST_Contains(b.geom, f.geom)

Extrair as linhas de drenagem do munic�pio de �Rafael Jambeiro�.

SELECT ST_Intersection(m.geom, d.geom)


FROM ba_municipios AS m, drenagem AS d
WHERE ST_Intersects(m.geom, d.geom) AND
nome_munic = 'Rafael Jambeiro'

Qual o cumprimento em km das linhas de drenagem do munic�pio de �Rafael Jambeiro�?

SELECT SUM(cumprimento) FROM


(
SELECT ST_Length(ST_Transform(ST_Intersection(m.geom, d.geom), 29101))
cumprimento
FROM ba_municipios AS m, drenagem AS d
WHERE ST_Intersects(m.geom, d.geom)
AND nome_munic = 'Rafael Jambeiro'
) AS r

Você também pode gostar