quinta-feira, 21 de junho de 2012

PostgreSql


PENÚLTIMA SEMANA DE SUFOCO!! TÁ ACABANDO =)

CREATE TABLE quadras (nome TEXT, id SERIAL PRIMARY KEY );
SELECT AddGeometryColumn('public','quadras','geometria',4674,'POLYGON',2 );
INSERT INTO quadras (nome,geometria) VALUES ('Quadra A', ST_GeometryFromText ( 'POLYGON((1 14 , 5 14, 5 9, 1 9, 1 14))', 4674));
INSERT INTO quadras (nome,geometria) VALUES ('Quadra B', ST_GeometryFromText ( 'POLYGON((7 14,11 14,11 9,7 9, 7 14))', 4674));
INSERT INTO quadras (nome,geometria) VALUES ('Quadra C', ST_GeometryFromText ( 'POLYGON((1 8,5 8,5 3,1 3, 1 8))', 4674));
INSERT INTO quadras (nome,geometria) VALUES ('Quadra D', ST_GeometryFromText ( 'POLYGON((7 8,11 8,11 3,7 3,7 8))', 4674));



create table ruas ( nome text, id SERIAL PRIMARY KEY );
SELECT AddGeometryColumn('public','ruas','geometria',4674,'LINESTRING', 2);
INSERT INTO ruas (nome,geometria) VALUES ('Rua principal', ST_GeometryFromText ( 'LINESTRING(6 15,6 0)', 4674));
INSERT INTO ruas (nome,geometria) VALUES ('Rua secundaria', ST_GeometryFromText ( 'LINESTRING(1 2,12 2)', 4674));

create table risco ( nome text, chave SERIAL PRIMARY KEY );
SELECT AddGeometryColumn('public','risco','geometria',4674,'POLYGON', 2);
INSERT INTO risco (nome,geometria) VALUES ('Area A', ST_GeometryFromText ( 'POLYGON ((4 7,9 7,4 10.5,4 7))', 4674));


create table pontos ( nome text, chave SERIAL PRIMARY KEY );
SELECT AddGeometryColumn('public','pontos','geometria',4674,'POINT', 2);
INSERT INTO pontos (nome,geometria) VALUES ('ponto 1', ST_GeometryFromText ( 'POINT (3 12)', 4674));
INSERT INTO pontos (nome,geometria) VALUES ('ponto 2', ST_GeometryFromText ( 'POINT (9 13)', 4674));
INSERT INTO pontos (nome,geometria) VALUES ('ponto 3', ST_GeometryFromText ( 'POINT (2 7)', 4674));
INSERT INTO pontos (nome,geometria) VALUES ('ponto 4', ST_GeometryFromText ( 'POINT (12 9)', 4674));

create table hospital ( nome text, chave SERIAL PRIMARY KEY );
SELECT AddGeometryColumn('public','hospital','geometria',4674,'POINT', 2);
INSERT INTO hospital (nome,geometria) VALUES ('hospital', ST_GeometryFromText ( 'POINT (12 1)', 4674));

DROP TABLE ruas
DROP TABLE quadras
DROP TABLE pontos

--PONTOS A 3.5 OU MENOS EM UNIDADES DE DISTANCIA MAIS PROXIMOS A RUA PRINCIPAL

SELECT pontos.nome, ST_Distance (pontos.geometria,
(SELECT ruas.geometria
FROM ruas
WHERE ruas.nome='Rua principal'))<3.5
FROM pontos ;

-- QUAL A ÁREA DA QUADRA A?
SELECT nome='Quadra A', ST_area(geometria) AS Area FROM quadras;

-- QUAL O COMPRIMENTO DA RUA SECUNDÁRIA?
SELECT nome='Rua secundaria', ST_Length(geometria) FROM ruas;

-- QUAL A DISTÂNCIA DE CADA PONTO ATÉ O HOSPITAL?
SELECT pontos.nome, ST_Distance(pontos.geometria,
(SELECT hospital.geometria
FROM hospital
WHERE hospital.nome='hospital'))
FROM pontos;

-- QUAL QUADRA NÃO INTERCEPTA A ÁREA DE RISCO?
SELECT quadras.nome, ST_Intersects(quadras.geometria,
(SELECT risco.geometria
FROM risco
WHERE risco.nome='Area A'))=false
FROM quadras;

-- QUAL PONTO FICA DENTRO DE QUAL QUADRA?
SELECT pontos.geometria, pontos.nome ,quadras.nome FROM pontos, quadras
WHERE ST_Contains(quadras.geometria, pontos.geometria)=TRUE;


SELECT pontos.nome, ST_Contains(pontos.geometria ,
(SELECT quadras.geometria FROM quadras))=TRUE FROM pontos;

Nenhum comentário: