¿Seleccionar el cuadro delimitador usando postGIS?

36

Quiero crear una consulta para seleccionar todas las formas y sus nodos que existen dentro de un cuadro delimitador usando postGIS. El cuadro delimitador incluirá todos los detalles ya que se recuperará el comando de ósmosis "--bounding-box"

¿Hay alguna manera de hacer eso?

    
pregunta uriel 20.05.2012 - 03:15

4 respuestas

36

Para los documentos de ósmosis, Veo la opción de comando :

--bounding-box top=49.5138 left=10.9351 bottom=49.3866 right=11.201

para PostGIS puede usar ST_MakeEnvelope (izquierda, abajo, derecha, arriba, srid) para construir un delimitador cuadro, luego el && operador de cuadro de límite para encontrar dónde se cruzan los cuadros de límite:

SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(10.9351, 49.3866, 11.201, 49.5138, 4326);

El SRID 4326 es para WGS84 Lat / Long, y solo se requiere para PostGIS 1.5; se puede omitir para versiones posteriores.

    
respondido por el Mike T 21.05.2012 - 09:32
8

Creo que será algo como esto: El cuadro delimitador en PostGIS es creado por

ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid>)

La consulta utilizará ST_Intersection con una subconsulta.

SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom 
FROM (SELECT nodes.id, nodes.tag, 
   ST_Intersection(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )).geom AS nodes_geom
   FROM nodes 
   WHERE ST_Intersects(nodes.the_geom, 
      ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))', <srid> )) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;

Más o menos lo tomé de Las páginas de ayuda de PostGIS
Una segunda consulta, en la tabla de formas, diseñada de manera similar a la anterior (pero con ST_Dimension () = 1) debería obtener las formas.

HTH, Micha

    
respondido por el Micha 21.05.2012 - 09:19
4

aquí hay un tema que es similar a su pregunta aquí ...

  

ST_Intersection - (T) Devuelve una geometría que representa el compartido   Porción de geomA y geomB. La implementación de la geografía hace un   transformar en geometría para hacer la intersección y luego transformar de nuevo   a WGS84.

1.también puede obtener información aquí sobre las funciones de construcción de geometría.

SELECT ST_AsText(ST_Intersection(
  ST_Buffer('POINT(0 0)', 2),
  ST_Buffer('POINT(3 0)', 2)
));

2.Otrainformación aquí sobre Intersects Intersection: PostGIS - ST_Intersects, ST_Intersection ...

SELECT b.the_geom As bgeom, p.the_geom As pgeom, 
        ST_Intersection(b.the_geom, p.the_geom) As intersect_bp
    FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
    WHERE ST_Overlaps(b.the_geom, p.the_geom)
    LIMIT 1;

espero que te ayude ...

    
respondido por el Aragon 21.05.2012 - 09:14
0

Este es un comentario sobre el código de @ Micha.

Los pares de coordenadas para POLYGON deben seguir un orden en el sentido de las agujas del reloj (o en sentido contrario a las agujas del reloj): superior izquierda, superior derecha, inferior derecha, inferior izquierda, superior izquierda nuevamente.

Entonces, en el sentido de las agujas del reloj, la llamada a la función debe ser:

ST_GeomFromText('POLYGON((ulx uly, urx ury, lrx lry, llx llr, ulx uly))', <srid>)

O en el sentido contrario a las agujas del reloj:

ST_GeomFromText('POLYGON((ulx uly, llx llr, lrx lry, urx ury, ulx uly))', <srid>)
    
respondido por el Daishi 06.11.2014 - 03:19

Lea otras preguntas en las etiquetas