Selección por cuadro delimitador con PostGIS

12

Tengo un gran conjunto de datos en una base de datos PostGIS. Lo estoy viendo a través de una interfaz web que carga los datos como GeoJSON. Hay demasiados datos para darle al cliente todos a la vez (10s de MB vale ...), así que me gustaría obtener un área de datos dentro del cuadro delimitador formado por los bordes de la ventana (la línea de puntos en la imagen a continuación ) Obtener las coordenadas para los puntos fyg es fácil.

Pregunta 1: ¿Es esta una buena forma de hacer las cosas? ¿Debería pensar en almacenarlos en caché como mosaicos o es probable que este método sea lo suficientemente eficiente?

Pregunta 2: ¿Cómo recupero solo los datos dentro de este cuadro delimitador?

Pregunta 3: Si una forma se superpone al borde del cuadro delimitador (por ejemplo, la forma A a continuación), ¿hay una manera simple de recortarla como se consulta en la segunda imagen?

ingrese la descripción de la imagen aquí

Mr_Chimp
fuente
¿Qué visor está ejecutando en el cliente?
oscuro
Mapstraction. Actualmente estoy usando OpenLayers como proveedor.
Mr_Chimp

Respuestas:

8

simplemente cambie el orden de las preguntas y tendrá un procedimiento:

2) Seleccione solo lo que se cruza con el bbox ( ST_Intersects).
3) Intersección con el bbox para recortar los polígonos ( ST_Intersection).
1) Crear una nueva tabla con los resultados ( CREATE TABLE newtable AS SELECT...).

Los documentos ST_Intersection contienen una muestra de código. Deberá adaptarlo y usar ST_PolygonFromText como bbox.

Pablo
fuente
4

Creo que la mayoría (todos) de los clientes web (y también los gis de escritorio) están haciendo esto. No puede enviar todo el conjunto de datos.

Si debe configurar algún tipo de almacenamiento en caché depende de si sus datos son estáticos o si están cambiando.

Para hacer esta casilla de verificación, marque para obtener los datos será muy rápido (si tiene un índice espacial), pero por supuesto no es gratis. Pagarás con algo de poder de la CPU.

Como se dijo antes: para encontrar los polígonos dentro de su extensión, use ST_Intersects.

Para obtener solo la parte dentro de su extensión, use ST_Intersection, pero no haga eso. ST_Intersection es un proceso costoso. A menos que tenga polígonos extremadamente grandes, creo que es mejor enviar los polígonos completos.

Pero supongo que quieres hacer esto sobre la marcha en lugar de ponerlo en una mesa

Nicklas Avén
fuente