sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur hittar man alla punkter inom polygon i postgis?

Du kan använda

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

Obs:Polygon måste vara stängd (det betyder den sista koordinaten ==första koordinaten). Den andra parametern POINT_LOCATION måste vara geometrikolumnen i din punkttabell.

UPPDATERING:Jag har försökt spela om dina steg i min pg-databas. Jag skapade 2 tabeller, LOCATIONS_TABLE (id, geom) och POLYGON (id, geom). Efter det fyllde jag LOCATIONS_TABLE med de två punkterna

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

Efter det infogade jag polygonen i POLYGON-tabellen

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

Jag visualiserade situationen i qgis, se bilden nedan:

Som du kan se är de 2 punkterna inuti polygonen. Så jag skapade manuellt en punkt utanför polygonen. Efter det kan du använda följande sql-fråga för att se om punkterna är inuti polygonen:

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

Den returnerar t för de 2 poängen inuti och falskt för den tredje punkten.




  1. Hur man byter namn på databas i SQL Server - SQL Server / TSQL självstudie del 26

  2. mysql för att få rekorddjup, räkna förälder- och förfadersposter

  3. Hur skapar man ett unikt index på en NULL-kolumn?

  4. Importdump för PL/SQL-utvecklare