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

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

S2Index

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

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

geoToS2

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

Синтаксис

geoToS2(lon, lat)

Аргументы

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

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

Пример

Запрос:

SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;

Результат:

┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘

s2ToGeo

Возвращает гео координаты (долгота, широта), соответствующие предоставленному индексу 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 прямоугольник представлен типом S2Region, называемым S2LatLngRect, который представляет прямоугольник в пространстве широты-долготы.

Синтаксис

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) │
└───────────────────────────────────────────┘