- Correção do SRID para a tabela
adutoras_ce
:
SELECT UpdateGeometrySRID('adutoras_ce','geom', 4674);
The default SRID for geography is 4326. If you're new, I would suggest using geography instead of geometry
- Crie um Buffer de um 1km de raio, em torno da adutora com o id=39
SELECT st_buffer(geom::geography, 1000)
FROM adutoras_ce
WHERE id = 39;
- Identifique quais são os dessalinizadores dentro do Buffer criado no item anterior.
SELECT
d.*
FROM
adutoras_ce a,
dessalinizadores d
WHERE
ST_Within(d.geom, ST_Transform(ST_Buffer(a.geom::geography, 1000)::geometry, 4674))
AND
a.id = 39
-- usando subquery:
SELECT
d.*
FROM
dessalinizadores d,
(
SELECT
ST_Transform(ST_Buffer(geom::geography, 1000)::geometry, 4674) AS geom
FROM
adutoras_ce
WHERE
id = 39
) as a
WHERE
ST_Within(d.geom, a.geom);
- Crie um Buffer em torno dos dessalinizadores que estão no município de Canindé:
SELECT
d.id,
ST_Transform(ST_Buffer(d.geom::geography, 8000)::geometry, 4674) AS geom
FROM
dessalinizadores d, municipios m
WHERE
m.nome = 'Canindé'
AND
ST_Intersects(d.geom, m.geom);
- Realize um dissolve na camada gerada:
SELECT
1 AS id,
ST_Union(ST_Transform(ST_Buffer(d.geom::geography, 8000)::geometry, 4674)) AS geom
FROM
dessalinizadores d,
municipios m
WHERE
m.nome = 'Canindé'
AND
ST_Intersects(d.geom, m.geom);
- Faça um corte nos municípios em relação a geometria que foi gerada na questão anterior:
SELECT
m.nome,
ST_Intersection(m.geom, b.geom) AS geom
FROM
municipios m,
(
SELECT
1 AS id,
ST_Union(ST_Transform(ST_Buffer(d.geom::geography, 8000)::geometry, 4674)) AS geom
FROM
dessalinizadores d,
municipios m
WHERE
m.nome = 'Canindé'
AND
ST_Intersects(d.geom, m.geom)
) AS b
WHERE
ST_Intersects(m.geom, b.geom);
- Em relação a questão anterior, qual é a área total de cada município?
SELECT
m.nome,
ST_Intersection(m.geom, b.geom) AS geom,
ST_Area(ST_Intersection(m.geom, b.geom)::geography)/1000000 AS area_km2
FROM
municipios m,
(
SELECT
1 AS id,
ST_Union(ST_Transform(ST_Buffer(d.geom::geography, 8000)::geometry, 4674)) AS geom
FROM
dessalinizadores d, municipios m
WHERE
m.nome = 'Canindé'
AND
ST_Intersects(d.geom, m.geom)
) AS b
WHERE
ST_Intersects(m.geom, b.geom);