Trouver des points situés dans un ensemble de coordonnées

9

J'ai une base de données PostGIS, et je veux trouver les points qui se trouvent dans une région (une boîte englobante). J'ai deux ensembles de coordonnées, à partir desquels je peux obtenir les quatre points rectangulaires qui forment la boîte (si nécessaire). Ma colonne de données en question est nommée «point» et elle est également de type point.

  • Existe-t-il de toute façon de spécifier quatre ensembles de coordonnées (lat / long) et d'obtenir tous les points qui se trouvent dans la boîte.
  • Ou spécifiez deux points et laissez la DB travailler sur les coins du rectangle, et renvoyez les points dans

Juste au cas où je ne serais pas clair sur ce que je veux réaliser. L'équivalent avec sql 'vanilla' si j'avais un champ lat et long au lieu d'un point serait:

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

MODIFICATION MISE À JOUR:

J'essaie la solution d'Underdark. Au début, je n'avais pas le constucteur ST_MakePoint (maintenant j'en ai) et j'ai toujours une erreur très similaire (juste sur un caractère différent).

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

et je reçois cette erreur:

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

ÉDITER:

À court terme, je peux le résoudre avec:

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

Mais je devrai comprendre pourquoi aucune des fonctions PostGIS ne fonctionne pas pour moi.

Ankur
la source
La méthode préférée consiste à publier en un seul endroit. Si cet endroit est inapproprié ou ne fonctionne pas, il peut facilement être migré. Je ne prendrai aucune mesure, car le SIG est là où votre question devrait être, mais je vous exhorte à supprimer la publication croisée sur SO.
whuber
1
@whuber .. terminé.
Ankur
Est-ce que - sélectionnez GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - fonctionne?
Sean
Je ne suis pas sûr de ce que tu veux dire. J'ai essayé différentes variantes de ce que vous avez dit et cela n'a pas fonctionné
Ankur
Quelle est la colonne "point" de votre référencement dans ST_MakePoint (point)
underdark

Réponses:

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

<- remplacez les coordonnées si nécessaire

obscur
la source
désolé pour la question stupide, mais qu'est-ce que 'the_geom' ... suis-je censé alias la requête SELECT * FROM myTable et cette valeur devient-elle 'the_geom'
Ankur
Désolé, bien sûr, c'est la colonne recherchée. Je l'appellerais db_column ou quelque chose comme ça, mais les docs postgis pensent le contraire ... cela a du sens lorsque vous savez ce que c'est.
Ankur
1
Lorsque j'exécute cela, j'obtiens une erreur indiquant que GeometryFromText n'existe pas. J'utilise postgis 2.0. J'ai également essayé st_geomfromtext.
picardo
@underdark, je me trompe peut-être, mais il semble qu'il manque une parenthèse.
Davide Pastore