3 votos

Combinación de ST_Touches y ST_Buffer

Estoy buscando una consulta PostGIS/Postgres que sea un poco complicada.

Quiero encontrar todos los polígonos dentro de un radio especificado y todos los polígonos vecinos al polígono donde tengo mis coordenadas

SELECT * 
FROM polygons_wgs84 
WHERE 
ST_Intersects(geom,
 ST_Transform(
     ST_Buffer(
       ST_Transform(
         ST_SetSRID(ST_MakePoint(9.116447, 60.548203), 4326), 
       3857), 
     1000), 
 4326)
)

Y los polígonos que ST_Touches el polígono que contiene este punto.

1voto

BrianA Puntos 1106

¿Algo así?

-- s1: the point
WITH s1 AS (SELECT
    ST_SetSRID(ST_MakePoint(9.116447, 60.548203), 4326) AS geom),
-- s2: polygon(s) where the point is in
s2 AS (SELECT
    p.geom FROM s1, polygons_wgs84 p WHERE ST_Intersects(p.geom, s1.geom)),
-- s3: polygon(s) which touch s2
s3 AS (SELECT
    p.geom FROM s2, polygons_wgs84 p WHERE ST_Touches(p.geom, s2.geom)),
-- s4: polygon(s) within a radius of about 492 m from the point (this will also contain s2)
s4 AS (SELECT
    p.geom
    FROM s1, polygons_wgs84 p
    WHERE ST_Intersects(p.geom, ST_Transform(ST_Buffer(ST_Transform(s1.geom, 3857), 1000), 4326))
SELECT geom FROM s3
    UNION
SELECT geom FROM s4;

Te recomendaría reproyectar tu capa de polígonos y la expresión en s1 a UTM 32N para el sur de Noruega para tener distancias en metros. A continuación, podría reemplazar s4 por el más performante

-- s4: polygon(s) within a radius of about 1000 m from the point (this will also contain s2)
s4 AS (SELECT
    p.geom
    FROM s1, polygons_wgs84 p
    WHERE ST_DWithin(p.geom, s1.geom, 1000))

0voto

bignose Puntos 861

Pruebe la siguiente consulta:

SELECT * FROM polygons_wgs84, (SELECT * FROM polygons_wgs84 where ST_Intersects(geom, ST_Transform(ST_Buffer(ST_Transform(ST_SetSRID(ST_MakePoint(9.116447, 60.548203), 4326), 3857), 1000), 4326))) sub WHERE ST_Touches(sub.geom, polygons_wgs84.geom);

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X