41 votos

Seleccione el cuadro delimitador de usar postgis

Quiero crear una consulta para seleccionar todas las formas y sus nodos que existen dentro de un cuadro delimitador de usar postGIS. El cuadro delimitador se incluye todos los detalles como la ósmosis "--cuadro" comando se recupera.

Hay alguna manera de hacerlo?

Gracias!

43voto

hernan43 Puntos 566

Para la ósmosis docs, veo la opción de comando:

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

para PostGIS puede utilizar ST_MakeEnvelope(izquierda, abajo, derecha, arriba, srid) para construir un cuadro delimitador, entonces el && cuadro delimitador del operador para encontrar donde los recuadros de delimitación se cruzan:

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 sólo es necesaria para PostGIS 1.5; puede ser omitido para las versiones posteriores.

8voto

GriffinHeart Puntos 187

Creo que va a 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 va a 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;

Yo más o menos llevo esto de La PostGIS páginas de ayuda
Una segunda consulta, en las maneras de mesa, de diseño similar a la anterior (pero con ST_Dimension()=1 ) deben recibir las maneras.

HTH, Micha

5voto

texai Puntos 178

hay un tema aquí que similar a tu pregunta aquí...

ST_Intersection - (T) Retorna una geometría que representa el compartido parte de geomA y geomB. La geografía en la aplicación de un transformar la geometría para hacer la intersección y luego se transforma de nuevo a WGS84.

1.también puede obtener información aquí acerca de la Geometría de la Construcción de Funciones.

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

intersection

2.Otra información aquí acerca de la Cruza de Intersección: 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;

intersection

espero te sirva de ayuda...

0voto

Daishi Kaszer Puntos 1

Este es un comentario de @Micha del código.

Los pares de coordenadas de la POLYGON debe seguir las agujas del reloj (o en sentido antihorario) orden : superior izquierda, superior derecha, inferior derecha, inferior izquierda, superior a la izquierda de nuevo.

Así, en sentido horario, la llamada a la función debe ser :

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

O en sentido contrario :

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

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