Może to przesada, ale jeśli używasz postgres możesz zainstalować postgis rozszerzenie do zarządzania danymi przestrzennymi. Następnie w irb możesz zrobić coś takiego:
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))')
Zapytanie sprawdza, czy punkt znajduje się wewnątrz danego bbox za pomocą funkcji ST_contains
To zwróci:
=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
Następnie możesz zrobić:
result.first
To zwróci:
{"st_contains"=>"t"}
Z tym punktem -0,7265, 44,483 (punkt poza polem bbox) wynikiem będzie:
{"st_contains"=>"f"}
Jeśli nie chcesz używać surowego sql, możesz użyć gemów do zarządzania danymi przestrzennymi. Bardzo dobry to:rgeo . Polecam przeczytać bloga twórcy
Korzystanie z rgeo możesz zdefiniować atrybuty swoich modeli za pomocą „geotypów”, takich jak punkty, wielokąty itp., a następnie użyć funkcji takich jak zawiera?
Zostawiam ci przegląd z bardzo podstawowymi instrukcjami instalacji postgis z Ubuntu.