Encuentra puntos que se encuentran dentro de un conjunto de coordenadas


9

Tengo una base de datos PostGIS, y quiero encontrar los puntos que se encuentran dentro de alguna región (un cuadro delimitador). Tengo dos conjuntos de coordenadas, de las cuales puedo obtener los cuatro puntos rectangulares que forman el cuadro (si es necesario). Mi columna de datos en cuestión se llama 'punto' y también es de tipo punto.

  • ¿Hay alguna forma de especificar cuatro conjuntos de coordenadas (lat / long) y obtener todos los puntos que se encuentran dentro del cuadro?
  • O especifique dos puntos y deje que el DB resuelva las esquinas del rectángulo y devuelva los puntos dentro de

Por si acaso no estoy siendo claro en cuanto a lo que quiero lograr. El equivalente con sql 'vainilla' si tuviera un campo lat y long en lugar de un punto sería:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

EDICIÓN ACTUALIZADA:

Estoy intentando la solución de Underdark. Al principio no tenía el constructor ST_MakePoint (ahora sí) y sigo teniendo un error muy similar (solo en un carácter diferente).

SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))

y recibo este error:

ERROR:  function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
                                          ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


********** Error **********

ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39

EDITAR:

A corto plazo puedo resolverlo con:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

Pero tendré que averiguar por qué ninguna de las funciones de PostGIS no me funciona.


El método preferido es publicar solo en un lugar. Si ese lugar es inapropiado o no funciona, se puede migrar fácilmente. No voy a tomar ninguna acción, porque GIS es donde debería estar su pregunta, pero le insto a que elimine la publicación cruzada en SO.
whuber

1
@whuber ... hecho.
Ankur

¿- GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) funciona?
Sean

No estoy seguro que quieres decir. Probé una variedad de variaciones diferentes de lo que dijiste y no funcionaron
Ankur

¿Cuál es la columna de "punto" en su referenciamiento ST_MakePoint (punto)
infraoscuridad

Respuestas:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<- reemplazar coordenadas según sea necesario


perdón por la estúpida pregunta, pero ¿qué es 'the_geom'? ... se supone que debo alias la consulta SELECT * FROM myTable y ese valor se convierte en 'the_geom'
Ankur

Lo siento, por supuesto, es la columna que se está buscando. Lo llamaría db_column o algo así, pero los documentos postgis piensan lo contrario ... tiene sentido cuando sabes lo que es.
Ankur

1
Cuando ejecuto esto, recibo un error que dice que GeometryFromText no existe. Estoy usando postgis 2.0. También probé st_geomfromtext.
picardo

@underdark tal vez estoy equivocado, pero parece que falta un paréntesis.
Davide Pastore

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.