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

Jak skonfigurować PostgreSQL z Postgis do obliczania odległości

Krótka odpowiedź:

Po prostu przekonwertuj swoje x,y wartości w locie za pomocą ST_MakePoint (uwaga na koszty!) i oblicz odległość od danego punktu, domyślnym SRS będzie WGS84 :

SELECT ST_Distance(ST_MakePoint(lon,lat)::GEOGRAPHY,
                   ST_MakePoint(23.73,37.99)::GEOGRAPHY) FROM places;

Korzystanie z GEOGRAPHY wynik otrzymasz w metrach, używając GEOMETRY da to w stopniach. Oczywiście znajomość SRS par współrzędnych jest niezbędna do obliczania odległości, ale jeśli masz kontrolę nad jakością danych, a współrzędne są spójne (w tym przypadku pomijając SRS), nie ma się czym martwić. Zacznie się to robić, jeśli planujesz wykonywać operacje na danych zewnętrznych, z których również nie wiesz o SRS i może się różnić od Twojego.

Długa odpowiedź:

Cóż, jeśli używasz PostGIS, nie powinieneś używać x,y w osobnych kolumnach w pierwszej kolejności. Możesz łatwo dodać kolumnę geometria / geografia, robiąc coś takiego.

To jest twój stół...

CREATE TABLE places (place TEXT, lon NUMERIC, lat NUMERIC);

Zawiera następujące dane ..

INSERT INTO places VALUES ('Budva',18.84,42.92),
                          ('Ohrid',20.80,41.14);

Oto jak dodać kolumnę typu geograficznego:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

Po dodaniu kolumny w ten sposób konwertujesz współrzędne na geografię / geometrię i aktualizujesz tabelę:

UPDATE places SET geo = ST_MakePoint(lon,lat);

Aby obliczyć odległość wystarczy użyć funkcji ST_Distance , jak następuje (odległość w metrach):

SELECT ST_Distance(geo,ST_MakePoint(23.73,37.99)) FROM places;

   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)

Jeśli masz parametr lokalizacji w WKT , możesz również użyć:

SELECT ST_Distance(geo,'POINT(23.73 37.99)') FROM places;
   st_distance   
-----------------
 686560.16822422
 430876.07368955
(2 Zeilen)



  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 uzyskać aktualny czas w PostgreSQL

  2. Jak używać identyfikatorów UUID w SQLAlchemy?

  3. Serwer Postgres nie odpowiada na żądanie nodejs

  4. PostgreSQL psycopg2 Python3.7.4 UnicodeDecodeError:kodek „ascii” nie może dekodować byte

  5. Żądanie zapytania transpozycji krzyżowej