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

Hvordan finder man alle punkter inden for polygon i postgis?

Du kan bruge

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

Bemærk:Polygon skal være lukket (det betyder den sidste koordinat ==første koordinat). Anden parameter POINT_LOCATION skal være geometrikolonnen i din punkttabel.

OPDATERING:Jeg har forsøgt at afspille dine trin igen i min sidedatabase. Jeg oprettede 2 tabeller, LOCATIONS_TABLE (id, geom) og POLYGON (id, geom). Derefter udfyldte jeg LOCATIONS_TABLE med de 2 punkter

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

Derefter indsatte jeg 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  (...)

Jeg visualiserede situationen i qgis, se billedet nedenfor:

Som du kan se, er de 2 punkter inde i polygonen. Så jeg oprettede manuelt et punkt uden for polygonen. Derefter kan du bruge følgende sql-forespørgsel for at se, om punkterne er inde i polygonen:

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

Det returnerer t for de 2 point indeni og falsk for det tredje punkt.




  1. Skrivebeskyttet Oracle Home

  2. Hvordan læser man NCLOB, CLOB dataværdier fra Oracle-databasen ved hjælp af klassiske ASP-sider?

  3. Er det muligt at bestille efter det samlede antal af flere borde?

  4. Type Mismatch:Kan ikke konvertere fra int til ResultSet