PostGIS Auswahl nach Lat / Long Bounding Box

18

Ich habe ein minLat, ein minLong, ein maxLat und ein maxLong von einem Kasten, der auf einer Karte gezeichnet wird. Im Moment sieht meine Abfrage zum Abrufen aller Punkte in der Box folgendermaßen aus:

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

Ich möchte die Geometriespalte anstelle von Lat / Long-Spalten verwenden, um die Ergebnisse zu erhalten. Ich habe diese Abfrage versucht:

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

Von diesem Beitrag: Wählen Sie mit postgis den Begrenzungsrahmen aus, der jedoch keine Ergebnisse liefert .

Hat jemand ein Beispiel, wie man alle Punkte innerhalb einer Box auswählt, die durch Min- und Max-Lat / Longs unter Verwendung der Geometrie in Postgis erstellt wurde?

bl8rchk
quelle
Welche Version von PostGIS verwenden Sie?
Mapperz
Mein PostGIS ist Version 2.0.1
bl8rchk
2
Befinden sich beide Geom-Spalten in derselben SRID?
nickves
Ich denke, ich könnte mit meinem Ansatz weit davon entfernt sein ... Ich habe nur eine Geom-Spalte. Es ist SRID ist 2223
bl8rchk
@bl8rchk was ist die Tabelle geomTableund das Feld mytable.geom?
theartofbeing

Antworten:

16

Ihre Daten sind nicht in lat / lon, daher müssen Sie Ihre Box in den Koordinatenraum Ihrer Daten schieben:

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