Forse questo è eccessivo, ma se stai usando postgres puoi installare postgis estensione per la gestione dei dati spaziali. Poi in un irb puoi fare qualcosa del genere:
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))')
La query sta verificando se il punto si trova all'interno della bbox specificata utilizzando la funzione ST_contains
Questo restituirà:
=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
Allora puoi fare:
result.first
Questo restituirà:
{"st_contains"=>"t"}
Con questo punto -0,7265, 44,483 (un punto fuori dalla bbox) il risultato sarà:
{"st_contains"=>"f"}
Se non vuoi usare raw sql puoi usare le gemme per gestire i dati spaziali. Uno molto buono è:rgeo . Consiglio di leggere il blog del creatore
Utilizzo di rgeo puoi definire attributi per i tuoi modelli con "geotipi" come punti, poligoni, ecc. e quindi utilizzare funzioni come contiene?
Vi lascio con un gist con istruzioni molto semplici per installare postgis con Ubuntu.