sql >> Databáze >  >> RDS >> PostgreSQL

Jak najít všechny body v polygonu v postgis?

Můžete použít

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

Poznámka:Polygon musí být uzavřený (tj. poslední souřadnice ==první souřadnice). Druhý parametr POINT_LOCATION musí být sloupec geometrie ve vaší tabulce bodů.

AKTUALIZACE:Pokusil jsem se přehrát vaše kroky v mé databázi pg. Vytvořil jsem 2 tabulky, LOCATIONS_TABLE (id, geom) a POLYGON (id, geom). Poté jsem naplnil LOCATIONS_TABLE 2 body

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

Poté jsem vložil polygon do tabulky 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  (...)

Situaci jsem vizualizoval v qgis, viz obrázek níže:

Jak vidíte, 2 body jsou uvnitř mnohoúhelníku. Takže jsem ručně vytvořil bod mimo polygon. Poté můžete použít následující dotaz SQL, abyste zjistili, zda jsou body uvnitř mnohoúhelníku:

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

Vrací t pro 2 body uvnitř a false pro třetí bod.




  1. Pomocí LOAD DATA LOCAL INFILE v Javě

  2. Jak rozdělit řetězec a vložit hodnoty do tabulky v SQL Server

  3. problém ORA-00001:Porušení jedinečného omezení přichází v INSERT/UPDATE

  4. Dotaz MySQL s podmínkou poddotazu RAND().