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

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

S2Index

S2 — это система географического индексирования, в которой все географические данные представляются на поверхности сферы (аналогично глобусу).

В библиотеке S2 точки представлены в виде индекса S2 — конкретного числа, которое кодирует точку на поверхности единичной сферы, в отличие от традиционных пар (широта, долгота). Чтобы получить индекс точки S2 для заданной точки в формате (широта, долгота), используйте функцию geoToS2. Также можно использовать функцию s2ToGeo для получения географических координат, соответствующих указанному индексу точки S2.

geoToS2

Возвращает индекс точки S2, соответствующий переданным координатам (longitude, latitude).

Синтаксис

geoToS2(lon, lat)

Аргументы

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

  • Индекс точки S2. UInt64.

Пример

SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;
┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘

s2ToGeo

Возвращает географические координаты (longitude, latitude), соответствующие заданному индексу точки S2.

Синтаксис

s2ToGeo(s2index)

Аргументы

  • s2index — индекс S2. UInt64.

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

Пример

SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;
┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘

s2GetNeighbors

Возвращает индексы соседних ячеек S2, соответствующие указанному S2. Каждая ячейка в системе S2 — это четырёхугольник, ограниченный четырьмя геодезическими линиями. Поэтому у каждой ячейки 4 соседа.

Синтаксис

s2GetNeighbors(s2index)

Аргументы

  • s2index — индекс S2. UInt64.

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

  • Массив, состоящий из 4 соседних индексов: array[s2index1, s2index3, s2index2, s2index4]. Array(UInt64).

Пример

SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;
┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘

s2CellsIntersect

Определяет, пересекаются ли две указанные ячейки S2.

Синтаксис

s2CellsIntersect(s2index1, s2index2)

Аргументы

  • siIndex1, s2index2 — индекс S2. UInt64.

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

  • 1 — если ячейки пересекаются. UInt8.
  • 0 — если ячейки не пересекаются. UInt8.

Пример

SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;
┌─intersect─┐
│         1 │
└───────────┘

s2CapContains

Определяет, содержит ли сферическая шапка точку S2. Сферическая шапка представляет собой часть сферы, отсечённую плоскостью. Она задаётся точкой на сфере и радиусом в градусах.

Синтаксис

s2CapContains(center, degrees, point)

Аргументы

  • center — индекс точки S2, соответствующей сферической шапке. UInt64.
  • degrees — радиус сферической шапки в градусах. Float64.
  • point — индекс точки S2. UInt64.

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

  • 1 — если сферическая шапка содержит индекс точки S2. UInt8.
  • 0 — если сферическая шапка не содержит индекс точки S2. UInt8.

Пример

SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;
┌─capContains─┐
│           1 │
└─────────────┘

s2CapUnion

Определяет наименьшую сферическую шапку, которая содержит две заданные шапки. Сферическая шапка представляет собой часть сферы, отсечённую плоскостью. Она задаётся точкой на сфере и радиусом в градусах.

Синтаксис

s2CapUnion(center1, radius1, center2, radius2)

Аргументы

  • center1, center2 — индексы точек S2, соответствующие двум входным сферическим шапкам (сферическая шапка). UInt64.
  • radius1, radius2 — радиусы двух входных сферических шапок (сферическая шапка) в градусах. Float64.

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

  • center — индекс точки S2, соответствующий центру наименьшей сферической шапки (сферическая шапка), содержащей две входные сферические шапки. UInt64.
  • radius — радиус наименьшей сферической шапки (сферическая шапка), содержащей две входные сферические шапки. Float64.

Пример

SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;
┌─capUnion───────────────────────────────┐
│ (4534655147792050737,60.2088283994957) │
└────────────────────────────────────────┘

s2RectAdd

Увеличивает размер ограничивающего прямоугольника так, чтобы он включал заданную точку S2. В системе S2 прямоугольник представлен типом S2Region, называемым S2LatLngRect, который описывает прямоугольник в пространстве широты и долготы.

Синтаксис

s2RectAdd(s2pointLow, s2pointHigh, s2Point)

Аргументы

  • s2PointLow — нижний индекс точки S2, соответствующий прямоугольнику. UInt64.
  • s2PointHigh — верхний индекс точки S2, соответствующий прямоугольнику. UInt64.
  • s2Point — целевой индекс точки S2, который должен быть включён в расширенный прямоугольник. UInt64.

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

  • s2PointLow — нижний идентификатор ячейки S2, соответствующий расширенному прямоугольнику. UInt64.
  • s2PointHigh — верхний идентификатор ячейки S2, соответствующий расширенному прямоугольнику. UInt64.

Пример

SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;
┌─rectAdd───────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectContains

Определяет, содержит ли заданный прямоугольник точку S2. В системе S2 прямоугольник представлен типом S2Region под названием S2LatLngRect, который задаёт прямоугольник в широтно-долготном пространстве.

Синтаксис

s2RectContains(s2PointLow, s2PointHi, s2Point)

Аргументы

  • s2PointLow — Нижний индекс точки S2, соответствующей прямоугольнику. UInt64.
  • s2PointHigh — Верхний индекс точки S2, соответствующей прямоугольнику. UInt64.
  • s2Point — Целевой индекс точки S2. UInt64.

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

  • 1 — если прямоугольник содержит заданную точку S2.
  • 0 — если прямоугольник не содержит заданную точку S2.

Пример

SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains;
┌─rectContains─┐
│            0 │
└──────────────┘

s2RectUnion

Возвращает наименьший прямоугольник, содержащий объединение этого прямоугольника и указанного прямоугольника. В системе S2 прямоугольник представлен типом S2Region с названием S2LatLngRect, который описывает прямоугольник в пространстве широта–долгота.

Синтаксис

s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

Аргументы

  • s2Rect1PointLow, s2Rect1PointHi — нижний и верхний индексы точек S2, соответствующие первому прямоугольнику. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — нижний и верхний индексы точек S2, соответствующие второму прямоугольнику. UInt64.

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

  • s2UnionRect2PointLow — идентификатор ячейки S2, соответствующий нижней границе объединённого прямоугольника. UInt64.
  • s2UnionRect2PointHi — идентификатор ячейки S2, соответствующий верхней границе объединённого прямоугольника. UInt64.

Пример

SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;
┌─rectUnion─────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectIntersection

Возвращает наименьший прямоугольник, содержащий пересечение этого прямоугольника с заданным прямоугольником. В системе S2 прямоугольник представляется типом S2RegionS2LatLngRect, который описывает прямоугольник в пространстве географических координат (широта/долгота).

Синтаксис

s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

Аргументы

  • s2Rect1PointLow, s2Rect1PointHi — младший и старший индексы точек S2, соответствующие первому прямоугольнику. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — младший и старший индексы точек S2, соответствующие второму прямоугольнику. UInt64.

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

  • s2UnionRect2PointLow — младший идентификатор ячейки S2, соответствующий прямоугольнику, содержащему пересечение заданных прямоугольников. UInt64.
  • s2UnionRect2PointHi — старший идентификатор ячейки S2, соответствующий прямоугольнику, содержащему пересечение заданных прямоугольников. UInt64.

Пример

SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;
┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘