ClickHouse/docs/en/sql-reference/functions/geo/s2.md

6.7 KiB

toc_title
S2 Geometry

Functions for Working with S2 Index

S2 is a geographical indexing system where all geographical data is represented on a three-dimensional sphere (similar to a globe).

geoToS2

Returns S2 point index corresponding to the provided coordinates (longitude, latitude).

Syntax

geoToS2(lon, lat)

Arguments

Returned values

  • S2 point index.

Type: UInt64.

Example

Query:

SELECT geoToS2(37.79506683, 55.71290588) as s2Index;

Result:

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

s2ToGeo

Returns geo coordinates (longitude, latitude) corresponding to the provided S2 point index.

Syntax

s2ToGeo(s2index)

Arguments

  • s2Index — S2 Index. UInt64.

Returned values

  • A tuple consisting of two values: tuple(lon,lat).

Type: lon - Float64. latFloat64.

Example

Query:

SELECT s2ToGeo(4704772434919038107) as s2Coodrinates;

Result:

┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘

s2GetNeighbors

Returns S2 neighbor indices corresponding to the provided S2). Each cell in the S2 system is a quadrilateral bounded by four geodesics. So, each cell has 4 neighbors.

Syntax

s2ToGeo(s2index)

Arguments

  • s2index — S2 Index. UInt64.

Returned values

  • An array consisting of the 4 neighbor indices: array[s2index1, s2index3, s2index2, s2index4].

Type: Each S2 index is UInt64.

Example

Query:

 select  s2GetNeighbors(5074766849661468672) AS s2Neighbors;

Result:

┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘

s2CellsIntersect

Determines if the two provided S2) cell indices intersect or not.

Syntax

s2CellsIntersect(s2index1, s2index2)

Arguments

  • siIndex1, s2index2 — S2 Index. UInt64.

Returned values

  • 1 — If the S2 cell indices intersect.
  • 0 — If the S2 cell indices don't intersect.

Type: UInt8.

Example

Query:

 select s2CellsIntersect(9926595209846587392, 9926594385212866560) as intersect;

Result:

┌─intersect─┐
│         1 │
└───────────┘

s2CapContains

A cap represents a portion of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. Imagine that we draw a line through the center of the sphere and our point. An infinite number of planes pass through this line, but any plane will intersect the cap in two points. Thus the angle is defined by one of this points and the entire line. So, the radius of Pi/2 defines a hemisphere and the radius of Pi defines a whole sphere.

Determines if a cap contains a s2 point index.

Syntax

s2CellsIntersect(center, degrees, point)

Arguments

  • center - S2 point index corresponding to the cap. UInt64.
  • degrees - Radius of the cap in degrees. Float64.
  • point - S2 point index. UInt64.

Returned values

  • 1 — If the cap contains the S2 point index.
  • 0 — If the cap doesn't contain the S2 point index.

Type: UInt8.

Example

Query:

select s2CapContains(1157339245694594829, 1.0, 1157347770437378819) as capContains;

Result:

┌─capContains─┐
│           1 │
└─────────────┘

s2CapUnion

A cap represents a portion of the sphere that has been cut off by a plane. It is defined by a point on a sphere and a radius in degrees. Imagine that we draw a line through the center of the sphere and our point. An infinite number of planes pass through this line, but any plane will intersect the cap in two points. Thus the angle is defined by one of this points and the entire line. So, the radius of Pi/2 defines a hemisphere and the radius of Pi defines a whole sphere.

Determines the smallest cap that contains the given two input caps.

Syntax

s2CapUnion(center1, radius1, center2, radius2)

Arguments

  • center1, center2 - S2 point indices corresponding to the two input caps. UInt64.
  • radius1, radius2 - Radii of the two input caps in degrees. Float64.

Returned values

  • center - S2 point index corresponding the center of the smallest cap containing the two input caps. Type: UInt64.
  • radius - Radius of the smallest cap containing the two input caps. Type: Float64.

Example

Query:

SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;

Result:

┌─capUnion───────────────────────────────┐
│ (4534655147792050737,60.2088283994957) │
└────────────────────────────────────────┘