Tìm các điểm nằm trong một tập hợp tọa độ


9

Tôi có một db PostGIS và tôi muốn tìm các điểm nằm trong một số khu vực (một hộp giới hạn). Tôi có hai bộ tọa độ, từ đó tôi có thể nhận được tất cả bốn điểm hình chữ nhật tạo thành hộp (nếu cần). Cột dữ liệu của tôi trong câu hỏi được đặt tên là 'điểm' và nó cũng thuộc loại điểm.

  • Có cách nào để chỉ định bốn bộ tọa độ (lat / long) và nhận tất cả các điểm nằm trong hộp không.
  • Hoặc chỉ định hai điểm và để DB xử lý các góc của hình chữ nhật và trả về các điểm trong

Chỉ trong trường hợp tôi không rõ ràng về những gì tôi muốn đạt được. Tương đương với 'vanilla' sql nếu tôi có trường lat và long thay vì một điểm sẽ là:

SELECT * FROM myTable where lat> xMin AND lat < xMax AND long > yMin and long < yMax

EDIT CẬP NHẬT:

Tôi đang thử giải pháp của underdark. Lúc đầu, tôi không có bộ tạo ST_MakePoint (bây giờ tôi làm) và tôi vẫn gặp một lỗi rất giống nhau (chỉ trên một ký tự khác).

SELECT * FROM myTable WHERE ST_Within(ST_MakePoint(point),GeometryFromText('POLYGON((75 20,80 30,90 22,85 10,75 20))',4326))

và tôi đang nhận được lỗi này:

ERROR:  function st_makepoint(point) does not exist
LINE 1: SELECT * FROM triples WHERE ST_Within(ST_MakePoint(point),Ge...
                                          ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.


********** Error **********

ERROR: function st_makepoint(point) does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
Character: 39

BIÊN TẬP:

Trong ngắn hạn, tôi có thể giải quyết nó bằng:

SELECT * FROM triples WHERE box '((point1),(point2))' @> point

Nhưng tôi sẽ phải tìm ra lý do tại sao không có chức năng nào của PostGIS không hoạt động đối với tôi.


Phương pháp ưa thích là chỉ đăng ở một nơi. Nếu địa điểm đó không phù hợp hoặc không hoạt động, nó có thể dễ dàng được di chuyển. Tôi sẽ không thực hiện bất kỳ hành động nào, bởi vì GIS là câu hỏi của bạn, nhưng tôi mong bạn nên xóa bài đăng chéo trên SO.
whuber

1
@whuber .. xong.
Ankur

Liệu - chọn GeometryFromText ('POLYGON ((75 20,80 30,90 22,85 10,75 20))', 4326) - có hoạt động không?
Sean

Tôi không chắc ý của bạn là gì. Tôi đã thử nhiều biến thể khác nhau của những gì bạn nói và chúng không hoạt động
Ankur

Cột "điểm" là gì mà bạn tham chiếu trong ST_MakePoint (điểm)
underdark

Câu trả lời:


9
SELECT * FROM myTable WHERE 
ST_Within(the_geom, GeometryFromText ('POLYGON((75 20,80 30,90 22,85 10,75 20))', 4326))

<- thay thế tọa độ khi cần thiết


xin lỗi vì câu hỏi ngu ngốc, nhưng 'the_geom' là gì ... tôi có nên đặt bí danh cho truy vấn CHỌN * TỪ myTable và giá trị đó trở thành 'the_geom'
Ankur

Xin lỗi, tất nhiên đó là cột đang được tìm kiếm. Tôi sẽ gọi nó là db_column hoặc một cái gì đó tương tự, nhưng các tài liệu postgis lại nghĩ khác ... nó có ý nghĩa khi bạn biết nó là gì.
Ankur

1
Khi tôi chạy cái này, tôi gặp một lỗi thông báo GeometryFromText không tồn tại. Tôi đang sử dụng postgis 2.0. Tôi cũng đã thử st_geomfromtext.
picardo

@underdark có thể tôi sai nhưng có vẻ như dấu ngoặc đơn bị thiếu.
Davide Pastore

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.