Kanske är detta en överdrift, men om du använder postgres du kan installera postgis tillägg för att hantera rumslig data. Sedan i en irb du kan göra något så här:
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))')
Frågan kontrollerar om punkten är inuti den givna bboxen med hjälp av ST_contains-funktionen
Detta kommer att returnera:
=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
Sedan kan du göra:
result.first
Detta kommer att returnera:
{"st_contains"=>"t"}
Med denna punkt -0,7265, 44,483 (en punkt utanför bboxen) blir resultatet:
{"st_contains"=>"f"}
Om du inte vill använda raw sql kan du använda ädelstenar för att hantera rumslig data. En mycket bra sådan är:rgeo . Jag rekommenderar att du läser skaparens blogg
Använda rgeo du kan definiera attribut för dina modeller med "geotyper" som punkter, polygoner etc. och sedan använda funktioner som innehåller?
Jag lämnar dig med en gist med mycket grundläggande instruktioner för att installera postgis med ubuntu.