PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So überprüfen Sie, ob Lat Long innerhalb der Stadtgrenzen liegt

Vielleicht ist das ein Overkill, aber wenn Sie postgres verwenden Sie können postgis installieren Erweiterung zur Verwaltung räumlicher Daten. Dann in einem irb Sie können so etwas tun:

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))')

Die Abfrage prüft, ob sich der Punkt innerhalb der angegebenen Bbox befindet, indem die ST_contains-Funktion verwendet wird

Dies wird zurückgeben:

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

Dann können Sie Folgendes tun:

result.first

Dies wird zurückgeben:

{"st_contains"=>"t"}

Mit diesem Punkt -0,7265, 44,483 (ein Punkt außerhalb der bbox) wird das Ergebnis sein:

{"st_contains"=>"f"}

Wenn Sie kein rohes SQL verwenden möchten, können Sie Gems verwenden, um räumliche Daten zu verwalten. Ein sehr guter ist:rgeo . Ich empfehle, den Blog des Erstellers zu lesen

Mit rgeo Sie können Attribute für Ihre Modelle mit "Geotypen" wie Punkte, Polygone usw. definieren und dann Funktionen wie enthält?

Ich überlasse Ihnen einen Grundsatz mit sehr einfachen Anweisungen zur Installation von postgis mit ubuntu.