Wybierz PostGIS według prostopadłej / długiej ramki ograniczającej

18

Mam minLat, minLong, maxLat i maxLong z pudełka narysowanego na mapie. W tej chwili moje zapytanie o uzyskanie wszystkich punktów w polu wygląda następująco:

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

Chcę użyć kolumny geometrii zamiast kolumn długich / długich, aby uzyskać wyniki. Próbowałem tego zapytania:

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

z tego postu: Wybierz obwiednię za pomocą postgis, ale nie zwraca żadnych wyników.

Czy ktoś ma przykład, jak wybrać wszystkie punkty w polu utworzonym przez min i max lat / longs przy użyciu geometrii w postgis?

bl8rchk
źródło
Jakiej wersji PostGIS używasz?
Mapperz
Mój PostGIS to wersja 2.0.1
bl8rchk
2
czy obie kolumny geom są w tym samym SRID?
nickves
Myślę, że moje podejście może być dalekie ... Mam tylko jedną kolumnę geom. Jego identyfikator SRID to 2223
bl8rchk
@ bl8rchk co to jest tabela geomTablei pole mytable.geom?
theartofbeing

Odpowiedzi:

16

Twoje dane nie są w formacie lat / lon, więc musisz wepchnąć swoje pole w przestrzeń współrzędnych swoich danych:

SELECT *
FROM mytable
WHERE 
  mytable.geom && 
  ST_Transform(ST_MakeEnvelope(minLon, minLat, maxLon, maxLat, 4326), 2223);
Paul Ramsey
źródło