sql >> Database >  >> RDS >> PostgreSQL

Hoe te controleren of lat long binnen de stadsgrenzen valt?

Misschien is dit een overkill, maar als je postgres gebruikt je kunt postgis installeren uitbreiding om ruimtelijke gegevens te beheren. Dan in een irb je kunt zoiets als dit doen:

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

De query controleert of het punt binnen de gegeven bbox ligt met behulp van de ST_contains-functie

Dit zal terugkeren:

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

Dan kun je het volgende doen:

result.first

Dit zal terugkeren:

{"st_contains"=>"t"}

Met dit punt -0.7265, 44.483 (een punt buiten de bbox) het resultaat is:

{"st_contains"=>"f"}

Als u geen onbewerkte sql wilt gebruiken, kunt u edelstenen gebruiken om ruimtelijke gegevens te beheren. Een hele goede is:rgeo . Ik raad aan om de blog van de maker te lezen

rgeo gebruiken u kunt attributen voor uw modellen definiëren met "geotypes" zoals punten, polygonen, enz. en vervolgens functies gebruiken zoals bevat?

Ik laat je achter met een gist met zeer eenvoudige instructies om postgis . te installeren met ubuntu.



  1. Aantal rijen Lezen / Werkelijke rijen Lees waarschuwingen in Plan Explorer

  2. Database-ontwerp, items in categorie, subcategorie en thema

  3. php verbinding pooling mysql

  4. Mysql-tabelopmerking ophalen met DatabaseMetaData