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

Sådan tjekker du, om lat long er i bygrænsen

Måske er dette en overkill, men hvis du bruger postgres du kan installere postgis udvidelse til at administrere rumlige data. Derefter i en irb du kan gøre noget som dette:

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

Forespørgslen kontrollerer, om punktet er inde i den givne bbox ved hjælp af ST_contains-funktionen

Dette vil returnere:

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

Så kan du gøre:

result.first

Dette vil returnere:

{"st_contains"=>"t"}

Med dette punkt -0,7265, 44,483 (et punkt uden for bboksen) vil resultatet være:

{"st_contains"=>"f"}

Hvis du ikke ønsker at bruge raw sql, kan du bruge ædelstene til at administrere rumlige data. En meget god er:rgeo . Jeg anbefaler at læse skaberens blog

Brug af rgeo du kan definere attributter for dine modeller med "geotyper" som punkter, polygoner osv. og derefter bruge funktioner som indeholder?

Jeg efterlader dig med en gist med meget grundlæggende instruktioner til at installere postgis med ubuntu.



  1. MySQL-tjenesten starter ikke på WAMP?

  2. Benchmarking af manuelle databaseimplementeringer vs. automatiserede implementeringer

  3. Hvordan sorteres resultaterne efter tidsstempel undtagen et af dem?

  4. Forkert heltalsværdi:'' for kolonne 'id' i række 1