Tôi không có đủ uy tín để nhận xét câu hỏi của bạn, có một liên kết mà bạn có thể thấy hữu ích: Truy vấn SQL cho point-in-polygon bằng PostgreSQL
Thêm tiện ích mở rộng cho cơ sở dữ liệu của bạn
CREATE EXTENSION postgis;
Tạo bảng
CREATE TABLE areas (
id SERIAL PRIMARY KEY,
name VARCHAR(64),
polygon GEOMETRY
);
Tạo chỉ mục trên trường đa giác
CREATE INDEX areas_polygon_idx ON areas USING GIST (polygon);
Chèn bản ghi
INSERT INTO areas (name, polygon) VALUES (
'A',
ST_GeometryFromText('POLYGON((50.6373 3.0750,50.6374 3.0750,50.6374 3.0749,50.63 3.07491,50.6373 3.0750))')
);
Truy vấn
SELECT name FROM areas WHERE ST_Contains(polygon, ST_GeomFromText('POINT(50.637 3.074)'));
name
------
(0 rows)
SELECT name FROM areas WHERE ST_Contains(polygon, ST_GeomFromText('POINT(50.63735 3.07495)'));
name
------
A
(1 row)