6 votos

Puntos de consulta PostGIS basados ​​en la distancia de la cuadrícula regular

Tengo una mesa de PostGIS con un gran número de puntos (> 150k) en una cuadrícula casi regular - todos los puntos están a unos 5 km de distancia. Cada punto tiene un campo de geometría y un valor asociado nr_days .

¿Hay una manera inteligente de consultar un subconjunto de esta tabla en una cuadrícula más gruesa, digamos sólo puntos que son 10, 15, 20 ... km aparte?

Hasta ahora sólo he encontrado casos en los que la gente estaba interesada en las características dentro de una cierta distancia en lugar de la otra manera.

9voto

Patrick Puntos 20392

Usted puede utilizar Postgres del generate_series dos veces, una para la dirección x, de una vez por la "y", para generar una cuadrícula, como, por ejemplo,

SELECT ST_AsText(ST_MakePoint(x, y)) 
FROM 
  generate_series(0, 40, 10) as x, 
  generate_series(200, 220, 10) y;

donde el primer número es el punto de inicio, el segundo el punto final y la final el tamaño de paso, es decir, una grilla de partida en (0, 200) y termina en (40, 220) con 10 metros de intervalos. Salí de la ST_AsText en así que usted puede visualizar los resultados, las primeras filas de los cuales son:

POINT(0 200)
POINT(0 210)
POINT(0 220)
POINT(10 200)
POINT(10 210)
POINT(10 220)

Ahora usted puede utilizar esto en una consulta al unirse en el real de la mesa y el uso ST_DWithin para establecer la tolerancia de intersección (si usted tiene puntos exactamente en una red, puede utilizar ST_Intersects).

SELECT t.* 
FROM 
  your_table AS t, 
  (SELECT ST_MakePoint(x, y) as geom 
  FROM 
     generate_series(0, 40, 10) as x, 
     generate_series(200, 220, 10) y) 
  AS grid 
WHERE ST_DWithin(t.geom, grid.geom, 1);

que va a encontrar de todo, desde la tabla que está a menos de 1 m de la cuadrícula.

Usted querrá asegurarse de que usted tiene un índice espacial en su mesa y, obviamente, ajustar la cuadrícula para su propia caso de uso.

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