PostGIS select par zone de délimitation lat / long

18

J'ai un minLat, minLong, maxLat et maxLong à partir d'une boîte dessinée sur une carte. En ce moment, ma requête pour obtenir tous les points dans la boîte ressemble à ceci:

SELECT *
FROM geomTable
WHERE (longitude BETWEEN minLon AND maxLon)
AND (latitude BETWEEN minLat AND maxLat)

Je veux utiliser la colonne de géométrie au lieu des colonnes lat / longues pour obtenir les résultats. J'ai essayé cette requête:

SELECT *
FROM mytable
WHERE mytable.geom && ST_MakeEnvelope(minLon, minLat, maxLon, maxLat, 4326);

from this post: Sélectionnez le cadre de sélection à l'aide de postgis, mais il ne renvoie aucun résultat.

Quelqu'un at-il un exemple de la façon de sélectionner tous les points dans une boîte créée par min / max lat / long en utilisant la géométrie dans postgis?

bl8rchk
la source
Quelle version de PostGIS utilisez-vous?
Mapperz
Mon PostGIS est la version 2.0.1
bl8rchk
2
les deux colonnes geom sont-elles dans le même SRID?
nickves
Je pense que je pourrais être loin de mon approche ... Je n'ai qu'une seule colonne geom. Son SRID est 2223
bl8rchk
@ bl8rchk quelle est la table geomTableet le champ mytable.geom?
theartofbeing

Réponses:

16

Vos données ne sont pas en lat / lon, vous devez donc pousser votre boîte dans l'espace de coordonnées de vos données:

SELECT *
FROM mytable
WHERE 
  mytable.geom && 
  ST_Transform(ST_MakeEnvelope(minLon, minLat, maxLon, maxLat, 4326), 2223);
Paul Ramsey
la source