PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да конфигурирате PostgreSQL с Postgis за изчисляване на разстояния

Кратък отговор:

Просто конвертирайте вашите x,y стойности в движение с помощта на ST_MakePoint (имайте предвид режийните разходи!) и изчислете разстоянието от дадена точка, SRS по подразбиране ще бъде WGS84 :

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

Използване на GEOGRAPHY ще получите резултата в метри, докато използвате GEOMETRY ще го даде в градуси. Разбира се, познаването на SRS на координатните двойки е наложително за изчисляване на разстояния, но ако имате контрол върху качеството на данните и координатите са последователни (в този случай, пропускайки SRS), няма много повод за безпокойство. Ще започне да става трудно, ако планирате да извършвате операции, използвайки външни данни, от които също не знаете за SRS и може да се различава от вашия.

Дълъг отговор:

Е, ако използвате PostGIS, не трябва да използвате x,y в отделни колони на първо място. Можете лесно да добавите колона за геометрия/география, като направите нещо подобно.

Това е вашата маса...

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

Съдържа следните данни ..

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

Ето как добавяте колона за географски тип:

ALTER TABLE places ADD COLUMN geo GEOGRAPHY;

След като колоната ви бъде добавена, ето как преобразувате координатите си в география/геометрия и актуализирате таблицата си:

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

За да изчислите разстоянието, трябва само да използвате функцията ST_Distance , както следва (разстояние в метри):

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

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

Ако имате вашия параметър за местоположение в WKT , можете също да използвате:

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. PostgreSQL - ФАТАЛНО:Неуспешно удостоверяване на идентификация за потребител myuser

  2. Максимален размер на транзакцията в PostgreSQL

  3. Как date_part() работи в PostgreSQL

  4. Избиране на множество max() стойности с помощта на един SQL израз

  5. Как работи функцията CONCAT() в PostgreSQL