Skip to main content

Функции для работы с географическими координатами

greatCircleDistance

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

greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

Входные параметры

  • lon1Deg — долгота первой точки в градусах. Диапазон — [-180°, 180°].
  • lat1Deg — широта первой точки в градусах. Диапазон — [-90°, 90°].
  • lon2Deg — долгота второй точки в градусах. Диапазон — [-180°, 180°].
  • lat2Deg — широта второй точки в градусах. Диапазон — [-90°, 90°].

Положительные значения соответствуют северной широте и восточной долготе, отрицательные — южной широте и западной долготе.

Возвращаемое значение

Расстояние между двумя точками на поверхности Земли в метрах.

Генерирует исключение, когда значения входных параметров выходят за границы диапазонов.

Пример

SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)
┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐
│ 14132374.194975413 │
└───────────────────────────────────────────────────────────────────┘

greatCircleAngle

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

greatCircleAngle(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

Входные параметры

  • lon1Deg — долгота первой точки в градусах.
  • lat1Deg — широта первой точки в градусах.
  • lon2Deg — долгота второй точки в градусах.
  • lat2Deg — широта второй точки в градусах.

Возвращаемое значение

Длина дуги большого круга между двумя точками в градусах.

Пример

SELECT greatCircleAngle(0, 0, 45, 0) AS arc
┌─arc─┐
│ 45 │
└─────┘

pointInEllipses

Проверяет, принадлежит ли точка хотя бы одному из эллипсов. Координаты — геометрические в декартовой системе координат.

pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ)

Входные параметры

  • x, y — координаты точки на плоскости.
  • xᵢ, yᵢ — координаты центра i-го эллипса.
  • aᵢ, bᵢ — полуоси i-го эллипса (в единицах измерения координат x,y).

Входных параметров должно быть 2+4⋅n, где n — количество эллипсов.

Возвращаемые значения

1, если точка внутри хотя бы одного из эллипсов, 0, если нет.

Пример

SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)
┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
│ 1 │
└─────────────────────────────────────────────────┘

pointInPolygon

Проверяет, принадлежит ли точка многоугольнику на плоскости.

pointInPolygon((x, y), [(a, b), (c, d) ...], ...)

Входные значения

  • (x, y) — координаты точки на плоскости. Тип данных — Tuple — кортеж из двух чисел.
  • [(a, b), (c, d) ...] — вершины многоугольника. Тип данных — Array. Каждая вершина представлена парой координат (a, b). Вершины следует указывать в порядке обхода по или против часовой стрелки. Минимальное количество вершин — 3. Многоугольник должен быть константным.
  • функция поддерживает также многоугольники с дырками (вырезанными кусками). Для этого случая, добавьте многоугольники, описывающие вырезанные куски, дополнительными аргументами функции. Функция не поддерживает не односвязные многоугольники.

Возвращаемые значения

1, если точка внутри многоугольника, 0, если нет. Если точка находится на границе многоугольника, функция может возвращать как 0, так и 1.

Пример

SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
┌─res─┐
│ 1 │
└─────┘