Skip to content

Instantly share code, notes, and snippets.

@marcellobenigno
Last active March 24, 2022 17:45
Show Gist options
  • Save marcellobenigno/71faadb1855d69da8668d77b9da4df37 to your computer and use it in GitHub Desktop.
Save marcellobenigno/71faadb1855d69da8668d77b9da4df37 to your computer and use it in GitHub Desktop.
Exemplos de Geoprocessing no PostGIS
  1. Correção do SRID para a tabela adutoras_ce:
SELECT UpdateGeometrySRID('adutoras_ce','geom', 4674);

https://gis.stackexchange.com/questions/284991/how-do-i-construct-a-geometry-point-in-srid-4326-from-lat-and-long

The default SRID for geography is 4326. If you're new, I would suggest using geography instead of geometry

  1. 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;
  1. 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);
  1. 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);
  1. 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);
  1. 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);
  1. 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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment