sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo encontrar todos los puntos dentro del polígono en postgis?

Puedes usar

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:el polígono debe estar cerrado (eso significa la última coordenada ==primera coordenada). El segundo parámetro POINT_LOCATION debe ser la columna de geometría en su tabla de puntos.

ACTUALIZACIÓN:He intentado reproducir sus pasos en mi base de datos pg. Creé 2 tablas, LOCATIONS_TABLE (id, geom) y POLYGON (id, geom). Después de eso, llené LOCATIONS_TABLE con los 2 puntos

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

Después de eso, inserté el polígono en la tabla 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  (...)

Visualicé la situación en qgis, vea la imagen a continuación:

Como puedes ver, los 2 puntos están dentro del polígono. Así que creé manualmente un punto fuera del polígono. Después de eso, puede usar la siguiente consulta sql para ver si los puntos están dentro del polígono:

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

Devuelve t para los 2 puntos interiores y false para el tercer punto.