Перейти к основному содержанию

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) AS greatCircleDistance
┌─greatCircleDistance─┐
│            14128352 │
└─────────────────────┘

geoDistance

Аналогично greatCircleDistance, но вычисляет расстояние на эллипсоиде WGS-84, а не на сфере. Это более точное приближение геоида Земли. Производительность такая же, как у greatCircleDistance (без потери производительности). Для вычисления расстояний на Земле рекомендуется использовать geoDistance. Техническое примечание: для достаточно близких точек расстояние вычисляется с использованием плоского приближения и метрики на касательной плоскости в средней точке координат.
geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
Входные параметры
  • lon1Deg — долгота первой точки в градусах. Диапазон: [-180°, 180°].
  • lat1Deg — широта первой точки в градусах. Диапазон: [-90°, 90°].
  • lon2Deg — долгота второй точки в градусах. Диапазон: [-180°, 180°].
  • lat2Deg — широта второй точки в градусах. Диапазон: [-90°, 90°].
Положительные значения соответствуют северной широте и восточной долготе, отрицательные — южной широте и западной долготе. Возвращаемое значение Расстояние между двумя точками на поверхности Земли в метрах. Генерирует исключение, если значения входных параметров выходят за пределы диапазона. Пример
SELECT geoDistance(38.8976, -77.0366, 39.9496, -75.1503) AS geoDistance
┌─geoDistance─┐
│   212458.73 │
└─────────────┘

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. Полигон должен быть константой.
  • Функция поддерживает полигоны с отверстиями (вырезанными областями). Тип данных — Polygon. Либо передайте весь Polygon как второй аргумент, либо сначала передайте внешний Ring, а затем каждое отверстие как отдельный дополнительный аргумент.
  • Функция также поддерживает MultiPolygon. Тип данных — MultiPolygon. Либо передайте весь MultiPolygon как второй аргумент, либо перечислите каждый входящий в него полигон как отдельный аргумент.
Возвращаемые значения 1, если точка находится внутри полигона, 0, если нет. Если точка находится на границе полигона, функция может вернуть либо 0, либо 1. Пример
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
┌─res─┐
│   1 │
└─────┘
Примечание • Вы можете установить validate_polygons = 0, чтобы отключить проверку геометрии. • pointInPolygon исходит из того, что каждый полигон сформирован корректно. Если входной полигон самопересекается, содержит кольца в неправильном порядке или перекрывающиеся рёбра, результаты становятся ненадёжными — особенно для точек, которые лежат точно на ребре, в вершине или внутри самопересечения, где невозможно однозначно определить, что считать “внутри”, а что — “снаружи”. • Когда аргумент полигона является константой, а точка задаётся с использованием индексируемых столбцов ключа (например, pointInPolygon((x, y), constant_polygon) в таблице, где x, y входят в PRIMARY KEY или покрываются индексом minmax), ClickHouse может использовать и первичный ключ, и индексы пропуска данных minmax, чтобы отсечь нерелевантные гранулы.
Последнее изменение 10 июня 2026 г.