PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment vérifier si lat long est dans les limites de la ville

C'est peut-être exagéré, mais si vous utilisez postgres vous pouvez installer postgis extension pour gérer les données spatiales. Puis dans un irb vous pouvez faire quelque chose comme ceci :

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 requête vérifie si le point est à l'intérieur de la bbox donnée en utilisant la ST_contains fonction

Cela renverra :

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

Ensuite, vous pouvez faire :

result.first

Cela renverra :

{"st_contains"=>"t"}

Avec ce point -0.7265, 44.483 (un point en dehors de la bbox) le résultat sera :

{"st_contains"=>"f"}

Si vous ne souhaitez pas utiliser SQL brut, vous pouvez utiliser des gemmes pour gérer les données spatiales. Un très bon est :rgeo . Je recommande de lire le blog du créateur

Utilisation de rgeo vous pouvez définir des attributs pour vos modèles avec des "géotypes" comme des points, des polygones, etc., puis utiliser des fonctions comme contient ?

Je vous laisse avec un essentiel avec des instructions très basiques pour installer postgis avec Ubuntu.