Có thể đây là mức quá mức cần thiết, nhưng nếu bạn đang sử dụng postgres bạn có thể cài đặt postgis phần mở rộng để quản lý dữ liệu không gian. Sau đó, trong irb bạn có thể làm điều gì đó như sau:
result = ActiveRecord::Base.connection.execute('SELECT
ST_Contains(ST_SetSRID(ST_MakeBox2D(ST_Point(-0.489, 51.28), ST_Point(0.236, 51.686)), 4326),
ST_SetSRID(ST_Point(-0.1265, 51.483), 4326))')
Truy vấn đang kiểm tra xem điểm có nằm trong bbox đã cho hay không bằng cách sử dụng hàm ST_contains
Điều này sẽ trả về:
=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
Sau đó, bạn có thể làm:
result.first
Điều này sẽ trả về:
{"st_contains"=>"t"}
Với điểm này -0,7265, 44,483 (một điểm bên ngoài bbox) kết quả sẽ là:
{"st_contains"=>"f"}
Nếu bạn không muốn sử dụng sql thô, bạn có thể sử dụng đá quý để quản lý dữ liệu không gian. Một cái rất hay là: rgeo . Tôi khuyên bạn nên đọc blog của người sáng tạo
Sử dụng rgeo bạn có thể xác định các thuộc tính cho mô hình của mình bằng "geotypes" như điểm, đa giác, v.v. và sau đó sử dụng các hàm như contains?
Tôi để lại cho bạn một ý chính với hướng dẫn rất cơ bản để cài đặt postgis với ubuntu.