PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment trouver tous les points d'un polygone dans postgis?

Vous pouvez utiliser

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

Remarque :Le polygone doit être fermé (c'est-à-dire que la dernière coordonnée ==la première coordonnée). Le deuxième paramètre POINT_LOCATION doit être la colonne géométrique de votre table de points.

MISE À JOUR :J'ai essayé de rejouer vos étapes dans ma base de données pg. J'ai créé 2 tables, LOCATIONS_TABLE (id, geom) et POLYGON (id, geom). Après cela, j'ai rempli le LOCATIONS_TABLE avec les 2 points

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

Après cela, j'ai inséré le polygone dans la table POLYGONE

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  (...)

J'ai visualisé la situation dans qgis, voir l'image ci-dessous :

Comme vous pouvez le voir, les 2 points sont à l'intérieur du polygone. J'ai donc créé manuellement un point en dehors du polygone. Après cela, vous pouvez utiliser la requête SQL suivante pour voir si les points sont à l'intérieur du polygone :

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

Il renvoie t pour les 2 points à l'intérieur et faux pour le troisième point.