S2 함수

S2 함수

S2는 모든 지리 데이터를 구(sphere, 지구본과 유사) 위에 표현하는 지리 인덱싱 시스템이에요.

S2 라이브러리에서 점은 기존의 (latitude, longitude) 쌍과 달리, 단위 구 표면의 한 점을 내부적으로 인코딩하는 특정 숫자인 S2 인덱스로 표현돼요. (latitude, longitude) 형식으로 주어진 점에 대한 S2 점 인덱스를 얻으려면 geoToS2 함수를 사용해요. 또한 s2ToGeo 함수로 지정된 S2 점 인덱스에 대응하는 지리 좌표를 얻을 수 있어요.

출처: 문서

본문

geoToS2

제공된 좌표 (longitude, latitude)에 대응하는 S2 점 인덱스를 반환해요.

구문 (Syntax)

geoToS2(lon, lat)

인자 (Arguments)

  • lon — 경도. Float64.
  • lat — 위도. Float64.

반환 값 (Returned values)

  • S2 점 인덱스. UInt64.

예시 (Example)

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

s2ToGeo

제공된 S2 점 인덱스에 대응하는 지리 좌표 (longitude, latitude)를 반환해요.

구문 (Syntax)

s2ToGeo(s2index)

인자 (Arguments)

  • s2index — S2 인덱스. UInt64.

반환 값 (Returned values)

  • 두 값으로 구성된 튜플:
    • lon. Float64.
    • lat. Float64.

예시 (Example)

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

s2GetNeighbors

제공된 S2 인덱스에 대응하는 S2 이웃 인덱스를 반환해요. S2 시스템에서 각 셀은 네 개의 측지선으로 경계 지어진 사각형이에요. 그래서 각 셀은 이웃이 4개예요.

구문 (Syntax)

s2GetNeighbors(s2index)

인자 (Arguments)

  • s2index — S2 인덱스. UInt64.

반환 값 (Returned value)

  • 4개의 이웃 인덱스로 구성된 배열: array[s2index1, s2index3, s2index2, s2index4]. Array(UInt64).

예시 (Example)

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

s2CellsIntersect

제공된 두 S2 셀이 교차하는지 여부를 판별해요.

구문 (Syntax)

s2CellsIntersect(s2index1, s2index2)

인자 (Arguments)

  • siIndex1, s2index2 — S2 인덱스. UInt64.

반환 값 (Returned value)

  • 1 — 셀이 교차하면. UInt8.
  • 0 — 셀이 교차하지 않으면. UInt8.

예시 (Example)

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

s2CapContains

캡(cap)이 S2 점을 포함하는지 판별해요. 캡은 평면이 잘라낸 구의 한 부분을 나타내요. 구 위의 한 점과 도(degree) 단위의 반지름으로 정의돼요.

구문 (Syntax)

s2CapContains(center, degrees, point)

인자 (Arguments)

  • center — 캡에 대응하는 S2 점 인덱스. UInt64.
  • degrees — 캡의 반지름(도). Float64.
  • point — S2 점 인덱스. UInt64.

반환 값 (Returned value)

  • 1 — 캡이 S2 점 인덱스를 포함하면. UInt8.
  • 0 — 캡이 S2 점 인덱스를 포함하지 않으면. UInt8.

예시 (Example)

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

s2CapUnion

주어진 두 입력 캡을 포함하는 가장 작은 캡을 결정해요. 캡은 평면이 잘라낸 구의 한 부분을 나타내요. 구 위의 한 점과 도(degree) 단위의 반지름으로 정의돼요.

구문 (Syntax)

s2CapUnion(center1, radius1, center2, radius2)

인자 (Arguments)

  • center1, center2 — 두 입력 캡에 대응하는 S2 점 인덱스. UInt64.
  • radius1, radius2 — 두 입력 캡의 반지름(도). Float64.

반환 값 (Returned values)

  • center — 두 입력 캡을 포함하는 가장 작은 캡의 중심에 대응하는 S2 점 인덱스. UInt64.
  • radius — 두 입력 캡을 포함하는 가장 작은 캡의 반지름. Float64.

예시 (Example)

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

s2RectAdd

주어진 S2 점을 포함하도록 경계 사각형의 크기를 키워요. S2 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현돼요.

구문 (Syntax)

s2RectAdd(s2pointLow, s2pointHigh, s2Point)

인자 (Arguments)

  • s2PointLow — 사각형에 대응하는 낮은 S2 점 인덱스. UInt64.
  • s2PointHigh — 사각형에 대응하는 높은 S2 점 인덱스. UInt64.
  • s2Point — 경계 사각형이 포함하도록 커져야 할 대상 S2 점 인덱스. UInt64.

반환 값 (Returned values)

  • s2PointLow — 커진 사각형에 대응하는 낮은 S2 셀 id. UInt64.
  • s2PointHigh — 커진 사각형에 대응하는 높은 S2 셀 id. UInt64.

예시 (Example)

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

s2RectContains

주어진 사각형이 S2 점을 포함하는지 판별해요. S2 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현돼요.

구문 (Syntax)

s2RectContains(s2PointLow, s2PointHi, s2Point)

인자 (Arguments)

  • s2PointLow — 사각형에 대응하는 낮은 S2 점 인덱스. UInt64.
  • s2PointHigh — 사각형에 대응하는 높은 S2 점 인덱스. UInt64.
  • s2Point — 대상 S2 점 인덱스. UInt64.

반환 값 (Returned value)

  • 1 — 사각형이 주어진 S2 점을 포함하면.
  • 0 — 사각형이 주어진 S2 점을 포함하지 않으면.

예시 (Example)

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

s2RectUnion

이 사각형과 주어진 사각형의 합집합을 포함하는 가장 작은 사각형을 반환해요. S2 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현돼요.

구문 (Syntax)

s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

인자 (Arguments)

  • s2Rect1PointLow, s2Rect1PointHi — 첫 번째 사각형에 대응하는 낮은/높은 S2 점 인덱스. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — 두 번째 사각형에 대응하는 낮은/높은 S2 점 인덱스. UInt64.

반환 값 (Returned values)

  • s2UnionRect2PointLow — 합집합 사각형에 대응하는 낮은 S2 셀 id. UInt64.
  • s2UnionRect2PointHi — 합집합 사각형에 대응하는 높은 S2 셀 id. UInt64.

예시 (Example)

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

s2RectIntersection

이 사각형과 주어진 사각형의 교집합을 포함하는 가장 작은 사각형을 반환해요. S2 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현돼요.

구문 (Syntax)

s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

인자 (Arguments)

  • s2Rect1PointLow, s2Rect1PointHi — 첫 번째 사각형에 대응하는 낮은/높은 S2 점 인덱스. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — 두 번째 사각형에 대응하는 낮은/높은 S2 점 인덱스. UInt64.

반환 값 (Returned values)

  • s2UnionRect2PointLow — 주어진 사각형의 교집합을 포함하는 사각형에 대응하는 낮은 S2 셀 id. UInt64.
  • s2UnionRect2PointHi — 주어진 사각형의 교집합을 포함하는 사각형에 대응하는 높은 S2 셀 id. UInt64.

예시 (Example)

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

더 알아보기 (Learn more)

  • ClickHouse 함수 목록 전체는 함수 개요를 참고해요.