PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come verificare se lat long è nei limiti della città

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.