2 votos

Contar puntos a una distancia X de una carretera

Necesito saber cuántos puntos tengo a 30 metros de una carretera. He utilizado esta consulta en Postgis:

select 
    a.ref, count(st_distance (a.geom, b.geom) < 30) as count
from osm_roads a, crime_incidents b
where a.ref='A306'
group by a.ref

Sin embargo, mi carretera está en segmentos y necesito unirlos para obtener el recuento total de puntos de la carretera A306. ¿Cómo lo hago?

2voto

Mark Jeronimus Puntos 196

Lo que puedes hacer es empezar con una unión y luego contar los puntos:

WITH road AS (
SELECT a.ref, ST_Union(geom) as geom FROM osm_roads WHERE a.ref='A306' GROUP BY a.ref
)
SELECT count(ci.*) FROM road r, crime_incidents ci WHERE ST_DWithin(ci.geom, r.geom, 30);

1voto

Braiam Puntos 120

Mover la validación de la distancia en el where cláusula.

Para evitar contar el mismo punto dos veces - si el punto está cerca de 2 segmentos - , cuente los puntos distintos utilizando su ID

Además, es más eficiente utilizar ST_DWithin en el where ya que hace uso de los índices espaciales.

select 
    a.ref, count(distinct b.id) as count
from osm_roads a, crime_incidents b
where a.ref='A306'
     AND ST_DWithin(a.geom, b.geom, 30)
group by a.ref;

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