PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie finde ich alle Punkte innerhalb des Polygons in Postgis?

Sie können

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

Hinweis:Polygon muss geschlossen sein (d. h. letzte Koordinate ==erste Koordinate). Der zweite Parameter POINT_LOCATION muss die Geometriespalte in Ihrer Punktetabelle sein.

UPDATE:Ich habe versucht, Ihre Schritte in meiner pg-Datenbank wiederzugeben. Ich habe 2 Tabellen erstellt, LOCATIONS_TABLE (id, geom) und POLYGON (id, geom). Danach habe ich die LOCATIONS_TABLE mit den 2 Punkten

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

Danach habe ich das Polygon in die POLYGON-Tabelle eingefügt

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

Ich habe die Situation in qgis visualisiert, siehe Bild unten:

Wie Sie sehen können, befinden sich die 2 Punkte innerhalb des Polygons. Also habe ich manuell einen Punkt außerhalb des Polygons erstellt. Danach können Sie die folgende SQL-Abfrage verwenden, um zu sehen, ob die Punkte innerhalb des Polygons liegen:

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

Es gibt t für die 2 Punkte innerhalb und falsch für den dritten Punkt zurück.