Mungkin ini berlebihan, tetapi jika Anda menggunakan postgres Anda dapat menginstal postgis ekstensi untuk mengelola data spasial. Kemudian dalam irb Anda dapat melakukan sesuatu seperti ini:
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))')
Kueri memeriksa apakah titik berada di dalam bbox yang diberikan menggunakan fungsi ST_contains
Ini akan mengembalikan:
=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
Kemudian Anda dapat melakukan:
result.first
Ini akan mengembalikan:
{"st_contains"=>"t"}
Dengan titik ini -0,7265, 44,483 (satu titik di luar bbox) hasilnya adalah:
{"st_contains"=>"f"}
Jika Anda tidak ingin menggunakan sql mentah, Anda dapat menggunakan permata untuk mengelola data spasial. Yang sangat bagus adalah:rgeo . Saya sarankan untuk membaca blog pembuatnya
Menggunakan rgeo Anda dapat menentukan atribut untuk model Anda dengan "geotipe" seperti titik, poligon, dll. dan kemudian menggunakan fungsi seperti berisi?
Saya meninggalkan Anda dengan inti dengan instruksi yang sangat mendasar untuk menginstal postgis dengan ubuntu.