sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man kontrollerar om lat long är i stadsgränsen

Kanske är detta en överdrift, men om du använder postgres du kan installera postgis tillägg för att hantera rumslig data. Sedan i en irb du kan göra något så här:

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

Frågan kontrollerar om punkten är inuti den givna bboxen med hjälp av ST_contains-funktionen

Detta kommer att returnera:

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

Sedan kan du göra:

result.first

Detta kommer att returnera:

{"st_contains"=>"t"}

Med denna punkt -0,7265, 44,483 (en punkt utanför bboxen) blir resultatet:

{"st_contains"=>"f"}

Om du inte vill använda raw sql kan du använda ädelstenar för att hantera rumslig data. En mycket bra sådan är:rgeo . Jag rekommenderar att du läser skaparens blogg

Använda rgeo du kan definiera attribut för dina modeller med "geotyper" som punkter, polygoner etc. och sedan använda funktioner som innehåller?

Jag lämnar dig med en gist med mycket grundläggande instruktioner för att installera postgis med ubuntu.



  1. Hur man lägger till icke null-begränsning till befintlig kolumn i MySQL

  2. Installera webbserver i Windows XP med Apache2, PHP5 och MySQL4 – Del 1

  3. Hur delar man upp ett värde i flera rader på newline char i PostgreSQL?

  4. Fel vid analys av data org.json.JSONUndantag:Slut på inmatning vid tecken 0 av - Android