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?


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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.