S2Index
S2 é um sistema de indexação geográfica em que todos os dados geográficos são representados sobre uma esfera (semelhante a um globo).
Na biblioteca S2, os pontos são representados pelo S2 Index — um número específico que codifica internamente um ponto na superfície de uma esfera unitária, em vez dos tradicionais pares (latitude, longitude). Para obter o índice de ponto S2 de um ponto especificado no formato (latitude, longitude), use a função geoToS2. Além disso, você pode usar a função s2ToGeo para obter as coordenadas geográficas correspondentes ao índice de ponto S2 especificado.
geoToS2
Retorna o índice de ponto S2 correspondente às coordenadas fornecidas (longitude, latitude).
Sintaxe
geoToS2(lon, lat)Argumentos
Valores retornados
- Índice de ponto S2. UInt64.
Exemplo
SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘s2ToGeo
Retorna as coordenadas geográficas (longitude, latitude) correspondentes ao índice de ponto S2 fornecido.
Sintaxe
s2ToGeo(s2index)Argumentos
s2index— S2 Index. UInt64.
Valores retornados
Exemplo
SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘s2GetNeighbors
Retorna os índices S2 vizinhos correspondentes ao S2 fornecido. Cada célula no sistema S2 é um quadrilátero delimitado por quatro geodésicas. Portanto, cada célula tem 4 vizinhos.
Sintaxe
s2GetNeighbors(s2index)Argumentos
s2index— S2 Index. UInt64.
Valor retornado
- Um array composto por 4 índices vizinhos:
array[s2index1, s2index3, s2index2, s2index4]. Array(UInt64).
Exemplo
SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘s2CellsIntersect
Determina se as duas células S2 fornecidas se intersectam ou não.
Sintaxe
s2CellsIntersect(s2index1, s2index2)Argumentos
siIndex1,s2index2— S2 Index. UInt64.
Valor retornado
Exemplo
SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;┌─intersect─┐
│ 1 │
└───────────┘s2CapContains
Determina se uma calota esférica contém um ponto S2. Uma calota esférica representa uma parte da esfera delimitada por um plano. Ela é definida por um ponto na esfera e um raio em graus.
Sintaxe
s2CapContains(center, degrees, point)Argumentos
center— índice de ponto S2 correspondente à calota esférica. UInt64.degrees— raio da calota esférica em graus. Float64.point— índice de ponto S2. UInt64.
Valor retornado
1— se a calota esférica contém o índice de ponto S2. UInt8.0— se a calota esférica não contém o índice de ponto S2. UInt8.
Exemplo
SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;┌─capContains─┐
│ 1 │
└─────────────┘s2CapUnion
Determina a menor calota que contém as duas calotas de entrada fornecidas. Uma calota representa uma porção da esfera delimitada por um plano. Ela é definida por um ponto na esfera e um raio em graus.
Sintaxe
s2CapUnion(center1, radius1, center2, radius2)Argumentos
center1,center2— índices de ponto S2 correspondentes às duas calotas esféricas de entrada. UInt64.radius1,radius2— raio das duas calotas esféricas de entrada, em graus. Float64.
Valores retornados
center— índice de ponto S2 correspondente ao centro da menor calota esférica que contém as duas calotas esféricas de entrada. UInt64.radius— raio da menor calota esférica que contém as duas calotas esféricas de entrada. Float64.
Exemplo
SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;┌─capUnion───────────────────────────────┐
│ (4534655147792050737,60.2088283994957) │
└────────────────────────────────────────┘s2RectAdd
Aumenta o tamanho do retângulo delimitador para incluir o ponto S2 especificado. No sistema S2, um retângulo é representado por um tipo de S2Region chamado S2LatLngRect, que representa um retângulo no espaço de latitude e longitude.
Sintaxe
s2RectAdd(s2pointLow, s2pointHigh, s2Point)Argumentos
s2PointLow— índice inferior do índice de ponto S2 correspondente ao retângulo. UInt64.s2PointHigh— índice superior do índice de ponto S2 correspondente ao retângulo. UInt64.s2Point— índice de ponto S2 de destino que o retângulo delimitador deve ser expandido para incluir. UInt64.
Valores retornados
s2PointLow— identificador inferior da célula S2 correspondente ao retângulo expandido. UInt64.s2PointHigh— identificador superior da célula S2 correspondente ao retângulo expandido. UInt64.
Exemplo
SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;┌─rectAdd───────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘s2RectContains
Determina se um determinado retângulo contém um ponto S2. No sistema S2, um retângulo é representado por um tipo de S2Region chamado S2LatLngRect, que representa um retângulo em um espaço de latitude e longitude.
Sintaxe
s2RectContains(s2PointLow, s2PointHi, s2Point)Argumentos
s2PointLow— Índice S2 do índice de ponto inferior correspondente ao retângulo. UInt64.s2PointHigh— Índice S2 do índice de ponto superior correspondente ao retângulo. UInt64.s2Point— Índice S2 do índice de ponto de destino. UInt64.
Valor retornado
1— Se o retângulo contiver o índice de ponto S2 especificado.0— Se o retângulo não contiver o índice de ponto S2 especificado.
Exemplo
SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains;┌─rectContains─┐
│ 0 │
└──────────────┘s2RectUnion
Retorna o menor retângulo que contém a união deste retângulo com o retângulo especificado. No sistema S2, um retângulo é representado por um tipo de S2Region chamado S2LatLngRect, que representa um retângulo no espaço de latitude e longitude.
Sintaxe
s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)Argumentos
s2Rect1PointLow,s2Rect1PointHi— Índices de ponto S2 inferior e superior correspondentes ao primeiro retângulo. UInt64.s2Rect2PointLow,s2Rect2PointHi— Índices de ponto S2 inferior e superior correspondentes ao segundo retângulo. UInt64.
Valores retornados
s2UnionRect2PointLow— ID de célula S2 inferior correspondente ao retângulo resultante da união. UInt64.s2UnionRect2PointHi— ID de célula S2 superior correspondente ao retângulo resultante da união. UInt64.
Exemplo
SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;┌─rectUnion─────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘s2RectIntersection
Retorna o menor retângulo que contém a interseção entre este retângulo e o retângulo fornecido. No sistema S2, um retângulo é representado por um tipo de S2Region chamado S2LatLngRect, que representa um retângulo no espaço de latitude e longitude.
Sintaxe
s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)Argumentos
s2Rect1PointLow,s2Rect1PointHi— índices de ponto S2 inferior e superior correspondentes ao primeiro retângulo. UInt64.s2Rect2PointLow,s2Rect2PointHi— índices de ponto S2 inferior e superior correspondentes ao segundo retângulo. UInt64.
Valores retornados
s2UnionRect2PointLow— ID de célula S2 inferior correspondente ao retângulo que contém a interseção dos retângulos informados. UInt64.s2UnionRect2PointHi— ID de célula S2 superior correspondente ao retângulo que contém a interseção dos retângulos informados. UInt64.
Exemplo
SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘