PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come trovare tutti i punti all'interno del poligono in Postgis?

Puoi usare

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

Nota:il poligono deve essere chiuso (questo significa che l'ultima coordinata ==prima coordinata). Il secondo parametro POINT_LOCATION deve essere la colonna della geometria nella tabella dei punti.

AGGIORNAMENTO:ho provato a ripetere i tuoi passaggi nel mio database pg. Ho creato 2 tabelle, LOCATIONS_TABLE (id, geom) e POLYGON (id, geom). Dopodiché ho riempito la LOCATIONS_TABLE con i 2 punti

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

Successivamente ho inserito il poligono nella tabella 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  (...)

Ho visualizzato la situazione in qgis, vedi l'immagine qui sotto:

Come puoi vedere, i 2 punti sono all'interno del poligono. Quindi ho creato manualmente un punto al di fuori del poligono. Successivamente, puoi utilizzare la seguente query sql, per vedere se i punti si trovano all'interno del poligono:

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

Restituisce t per i 2 punti interni e false per il terzo punto.