sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo verificar si la lat long está dentro de los límites de la ciudad

Tal vez esto sea una exageración, pero si está usando postgres puede instalar postgis extensión para gestionar datos espaciales. Luego en un irb puedes hacer algo como esto:

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 consulta verifica si el punto está dentro del bbox dado usando la función ST_contains

Esto devolverá:

=> #<PG::Result:0x007fa517fcbe08 @connection=#<PG::Connection:0x007fa5167f8970 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>

Entonces puedes hacer:

result.first

Esto devolverá:

{"st_contains"=>"t"}

Con este punto -0.7265, 44.483 (un punto fuera del bbox) el resultado será:

{"st_contains"=>"f"}

Si no desea usar sql sin procesar, puede usar gemas para administrar datos espaciales. Una muy buena es:rgeo . Recomiendo leer el blog del creador.

Usando rgeo puede definir atributos para sus modelos con "geotipos" como puntos, polígonos, etc. y luego usar funciones como ¿contiene?

Los dejo con un gist con instrucciones muy básicas para instalar postgis con ubuntu.