PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để tìm tất cả các điểm trong đa giác trong postgis?

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao mã này không thành công trong PostgreSQL và làm thế nào để khắc phục nó (làm việc xung quanh)? Nó có phải là lỗ hổng công cụ Postgres SQL không?

  2. biểu thức bảng chung có thể ghi và nhiều câu lệnh chèn

  3. Thay thế khi mệnh đề IN được đưa vào RẤT NHIỀU giá trị (postgreSQL)

  4. Không thể cài đặt pg gem trong Mavericks bằng Postgres.app

  5. Làm cách nào để tạo nhiều chuỗi thời gian trong một truy vấn sql?