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?


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);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.