Как настроить PostgreSQL с Postgis для расчета расстояний - PullRequest
0 голосов
/ 21 сентября 2018

Я знаю, что это может быть глупый вопрос, но я ищу некоторое время и не могу найти правильный ответ.У меня есть база данных PostgreSQL с установленным PostGIS.В одной таблице у меня есть записи с lon lat (предположим, что столбцы - это place, lon, lat).

Что мне добавить в эту таблицу или / и какую процедуру я могу использовать, чтобы иметь возможность считать расстояние между этими местами в метрах.

Я читал, что необходимо знатьSRID места, чтобы можно было рассчитывать расстояние.Можно ли его не знать / использовать, и при этом можно рассчитывать расстояние в метрах, основываясь только на длинных широтах?

1 Ответ

0 голосов
/ 21 сентября 2018

Краткий ответ:

Просто конвертируйте значения 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)
...