PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak sprawdzić, czy długi lat mieści się w granicach miasta?

Może to przesada, ale jeśli używasz postgres możesz zainstalować postgis rozszerzenie do zarządzania danymi przestrzennymi. Następnie w irb możesz zrobić coś takiego:

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

Zapytanie sprawdza, czy punkt znajduje się wewnątrz danego bbox za pomocą funkcji ST_contains

To zwróci:

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

Następnie możesz zrobić:

result.first

To zwróci:

{"st_contains"=>"t"}

Z tym punktem -0,7265, 44,483 (punkt poza polem bbox) wynikiem będzie:

{"st_contains"=>"f"}

Jeśli nie chcesz używać surowego sql, możesz użyć gemów do zarządzania danymi przestrzennymi. Bardzo dobry to:rgeo . Polecam przeczytać bloga twórcy

Korzystanie z rgeo możesz zdefiniować atrybuty swoich modeli za pomocą „geotypów”, takich jak punkty, wielokąty itp., a następnie użyć funkcji takich jak zawiera?

Zostawiam ci przegląd z bardzo podstawowymi instrukcjami instalacji postgis z Ubuntu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sformatować pieniądze w PostgreSQL

  2. Nieskończona pętla w funkcji wyzwalania

  3. Nie można połączyć się z Postgresql na porcie 5432

  4. Jak agregować liczby całkowite w postgresql?

  5. Generuj wartości DOMYŚLNE w CTE UPSERT przy użyciu PostgreSQL 9.3