14 votos

Seleccionar por rectángulo delimitador con PostGIS

Tengo un gran conjunto de datos en una base de datos PostGIS. Estoy viendo a través de una interfaz web que carga los datos como GeoJSON. Hay demasiados datos para ofrecer al cliente todos a la vez (de 10s MBs vale la pena...) así que me gustaría conseguir un área de datos dentro de la caja de contorno formado por los bordes de la ventana (la línea de puntos en la imagen de abajo). Obtención de las coordenadas de los puntos de f y g es fácil.

Pregunta 1: ¿Es esta una buena manera de hacer las cosas? Debería estar pensando en la caché de ellos como los azulejos o este método es probable que ser lo suficientemente eficaz?

Pregunta 2: ¿Cómo puedo recuperar sólo los datos dentro de este cuadro delimitador?

Pregunta 3: Si una forma se superpone el borde del cuadro delimitador (por ejemplo, forma Una abajo) hay una manera sencilla de cultivos como es consultar como en la segunda imagen?

enter image description here

8voto

Pablo Puntos 6414

acaba de cambiar el orden de las preguntas y dispone de un procedimiento:

2)Seleccionar sólo aquello que se cruza con el bbox (ST_Intersects).
3)se Cruzan con el bbox a clip de los polígonos (ST_Intersection).
1)Crear una nueva tabla con los resultados (CREATE TABLE newtable AS SELECT...).

ST_Intersection docs contiene un ejemplo de código. Usted tendrá que adaptar y utilizar ST_PolygonFromText como la bbox.

4voto

Lars Mæhlum Puntos 4569

Hola

Creo que la mayoría (todos) en la web de los clientes (y sig de escritorio) está haciendo esto. No se puede enviar todo el conjunto de datos.

Si usted debe establecer algún tipo de almacenamiento en caché depende de si los datos se puede variar la estática o si está cambiando.

Para hacer este cuadro delimitador de verificación para obtener los datos va a ser muy rápido (si usted tiene un índice espacial), pero, por supuesto, no es gratis. Usted va a pagar con alguna cpu-poder.

Como se dijo antes: Para encontrar los polígonos dentro de su medida en que usted utiliza ST_Intersects.

Para obtener sólo la parte dentro de su alcance el uso de ST_Intersection, pero no hagas eso. ST_Intersection es un proceso costoso. A menos que usted tiene muy grandes polígonos creo que es mejor enviar la totalidad de los polígonos.

Pero supongo que usted quiere hacer esto sobre la marcha, en vez de ponerlo en una tabla

/Nicklas

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