Bạn có thể sử dụng
SELECT POINT_LOCATION
FROM LOCATIONS_TABLE
WHERE ST_Contains(ST_GEOMFROMTEXT('POLYGON((P1.X P1.Y, P2.X P2.Y, ...))'), LOCATIONS_TABLE.POINT_LOCATION);
Lưu ý:Đa giác phải được đóng lại (có nghĩa là tọa độ cuối cùng ==tọa độ đầu tiên). Tham số thứ hai POINT_LOCATION phải là cột hình học trong bảng điểm của bạn.
CẬP NHẬT:Tôi đã cố gắng phát lại các bước của bạn trong cơ sở dữ liệu pg của tôi. Tôi đã tạo 2 bảng, LOCATIONS_TABLE (id, geom) và POLYGON (id, geom). Sau đó, tôi điền vào LOCATIONS_TABLE với 2 điểm
SRID=4326;POINT(-103.4955 20.723544)
SRID=4326;POINT(-103.496956 20.722446)
Sau đó, tôi đã chèn đa giác vào bảng 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 (...)
Tôi đã hình dung tình huống trong qgis, xem hình bên dưới:
Như bạn có thể thấy, 2 điểm nằm bên trong đa giác. Vì vậy, tôi đã tạo thủ công một điểm bên ngoài đa giác. Sau đó, bạn có thể sử dụng truy vấn sql sau để xem các điểm có nằm bên trong đa giác hay không:
SELECT ST_Contains(polygon.geom, point.geom)
FROM public."LOCATIONS_TABLE" point, public."POLYGON" polygon
Nó trả về t cho 2 điểm bên trong và false cho điểm thứ ba.