PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak znaleźć wszystkie punkty w obrębie wielokąta w postgisie?

Możesz użyć

SELECT POINT_LOCATION 
FROM LOCATIONS_TABLE 
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);

Uwaga:Wielokąt musi być zamknięty (oznacza to, że ostatnia współrzędna ==pierwsza współrzędna). Drugi parametr POINT_LOCATION musi być kolumną geometrii w tabeli punktów.

AKTUALIZACJA:Próbowałem odtworzyć twoje kroki w mojej bazie danych pg. Utworzyłem 2 tabele, LOCATIONS_TABLE (id, geom) i POLYGON (id, geom). Następnie wypełniłem LOCATIONS_TABLE 2 punktami

SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)

Następnie wstawiłem wielokąt do tabeli POLYGON

SRID=4326;POLYGON((-103.305496375 20.8527356811533,-103.0810348125 20.6129741620855,-101.6261045 20.5375321062668,-99.8356786875 20.3958770270624,-99.803065375 22.0572706994358,-99.649948125 28.9186361984516,-121.1212769375 8.69559423007209,-103.305496375  (...)

Zwizualizowałem sytuację w qgis, patrz zdjęcie poniżej:

Jak widać, 2 punkty znajdują się wewnątrz wielokąta. Więc ręcznie utworzyłem punkt poza wielokątem. Następnie możesz użyć następującego zapytania sql, aby sprawdzić, czy punkty znajdują się wewnątrz wielokąta:

SELECT ST_Contains(polygon.geom, point.geom) 
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon

Zwraca t dla 2 punktów wewnątrz i false dla trzeciego punktu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać status uruchomionego zapytania w bazie postgresql?

  2. Określanie odrębnej sekwencji na tabelę w Hibernate na podklasach

  3. Jak zaimportować dane z pliku CSV do tabeli PostgreSQL?

  4. Próbuję skonfigurować postgres dla aplikacji ror, pojawia się błąd - fe_sendauth:nie podano hasła

  5. Czy istnieje sposób na zaadresowanie wszystkich elementów tablicy JSON podczas tworzenia ograniczenia w PostgreSQL?