Функции для геоданных

Функции для работы с геопространственными данными и инструментами ГИС.

ST_Point()

Описание

Создает точку типа GEOMETRY.

Использование

ST_Point(num, num)

Создает точку типа GEOMETRY из двух чисел типа DOUBLE. Аргументами могут быть, например, географические координаты, заданные в градусах в виде десятичной дроби.

Некоторые примеры использования описаны в этом сценарии.

Посмотреть пример

Создадим таблицу с названиями организаций и координатами их офисов. Вычислим расстояние от нулевого километра Москвы (55.75579845052788, 37.617679973467204) до офисов этих организаций и выведем эту информацию в виде таблицы:

CREATE TABLE demo.table (organization VARCHAR,
                        latitude DOUBLE,
                        longitude DOUBLE);

INSERT INTO demo.table VALUES
    ('Postgres Professional LLC', 55.69189394353437, 37.564623398131985),
    ('Oracle Corporation', 30.243622717202587, -97.72199761339736);

SELECT
    organization,
    round(ST_Distance_Sphere(ST_Point(latitude, longitude),
                             ST_Point(55.75579845052788, 37.617679973467204)
                            )/1000)
    AS "distance from moscow, km"
FROM demo.table;
+---------------------------+--------------------------+
| organization              | distance from moscow, km |
+---------------------------+--------------------------+
| Postgres Professional LLC | 8                        |
+---------------------------+--------------------------+
| Oracle Corporation        | 9557                     |
+---------------------------+--------------------------+

ST_Distance()

Описание

Вычисляет расстояние между двумя точками на плоскости.

Использование

ST_Distance(GEOMETRY, GEOMETRY)

Вычисляет расстояние на плоскости между двумя точками типа GEOMETRY.

Посмотреть пример
SELECT
    ST_Distance('POINT (0 0)'::GEOMETRY, 'POINT (5 12)'::GEOMETRY)
        AS distance;
+----------+
| distance |
+----------+
| 13       |
+----------+

ST_Distance_Sphere()

Описание

Вычисляет расстояние между двумя точками на сфере.

Использование

ST_Distance_Sphere(GEOMETRY, GEOMETRY)

Вычисляет расстояние по гаверсину (большому кругу сферы) между двумя точками типа GEOMETRY.

Возвращает расстояние в метрах. Входные данные должны быть в координатах, заданных в градусах в виде десятичной дроби (формат WGS84, EPSG:4326) с порядком осей: широта (latitude), долгота (longitude).

Некоторые примеры использования описаны в этом сценарии.

Посмотреть пример

Создадим таблицу с названиями организаций и координатами их офисов. Вычислим расстояние от нулевого километра Москвы (55.75579845052788, 37.617679973467204) до офисов этих организаций и выведем эту информацию в виде таблицы:

CREATE TABLE demo.table (organization VARCHAR,
                        latitude DOUBLE,
                        longitude DOUBLE);

INSERT INTO demo.table VALUES
    ('Postgres Professional LLC', 55.69189394353437, 37.564623398131985),
    ('Oracle Corporation', 30.243622717202587, -97.72199761339736);

SELECT
    organization,
    round(ST_Distance_Sphere(ST_Point(latitude, longitude),
                             ST_Point(55.75579845052788, 37.617679973467204)
                            )/1000)
    AS "distance from moscow, km"
FROM demo.table;
+---------------------------+--------------------------+
| organization              | distance from moscow, km |
+---------------------------+--------------------------+
| Postgres Professional LLC | 8                        |
+---------------------------+--------------------------+
| Oracle Corporation        | 9557                     |
+---------------------------+--------------------------+

Полезные ссылки