sql >> Databáze >  >> RDS >> PostgreSQL

Jak zkontrolovat, zda je lat long v hranicích města

Možná je to přehnané, ale pokud používáte postgres můžete nainstalovat postgis rozšíření pro správu prostorových dat. Poté v irbu můžete udělat něco takového:

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

Dotaz kontroluje, zda je bod uvnitř daného bboxu pomocí funkce ST_contains

Toto vrátí:

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

Pak můžete udělat:

result.first

Toto vrátí:

{"st_contains"=>"t"}

S tímto bodem -0,7265, 44,483 (bod mimo bbox) výsledek bude:

{"st_contains"=>"f"}

Pokud nechcete používat raw sql, můžete ke správě prostorových dat použít gems. Velmi dobrý je:rgeo . Doporučuji přečíst si autorův blog

Pomocí rgeo můžete definovat atributy pro své modely pomocí „geotypů“, jako jsou body, polygony atd., a poté použít funkce jako obsahuje?

Nechám vás s souhrnem s velmi základními pokyny k instalaci postgis s ubuntu.



  1. mysql_fetch_array() vrací 'dodaný argument není platný zdroj výsledků MySQL'

  2. Jak najdu znaky Unicode/non-ASCII v poli NTEXT v tabulce SQL Server 2005?

  3. Získání org.hibernate.exception.JDBCConnectionException:nelze provést dotaz ani přes JNDI

  4. Jak indexovat sloupec Y/N v Oracle