본문으로 바로가기
본문으로 바로가기

S2 인덱스를 다루는 함수

S2Index

S2는 모든 지리 데이터가 구(지구본과 유사한 구체) 위에 표현되는 지리 인덱싱 시스템입니다.

S2 라이브러리에서는 점을 S2 Index로 표현합니다. 이는 전통적인 (위도, 경도) 쌍과 달리, 단위 구 표면상의 한 점을 내부적으로 인코딩한 특정 숫자입니다. (위도, 경도) 형식으로 지정된 주어진 점에 대한 S2 포인트 인덱스(S2 point index)를 얻으려면 geoToS2 함수를 사용합니다. 또한 지정된 S2 포인트 인덱스에 해당하는 지리 좌표를 얻기 위해 s2ToGeo 함수를 사용할 수 있습니다.

geoToS2

지정된 좌표 (longitude, latitude)에 해당하는 S2 포인트 인덱스를 반환합니다.

구문

geoToS2(lon, lat)

인수

반환값

  • S2 포인트 인덱스. UInt64.

예제

쿼리:

SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;

결과:

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

s2ToGeo

제공된 S2 포인트 인덱스에 대응하는 지리 좌표 (longitude, latitude)를 반환합니다.

구문

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 — 캡(cap)에 해당하는 S2 포인트 인덱스. UInt64.
  • degrees — 캡의 반지름(도 단위). Float64.
  • point — S2 포인트 인덱스. UInt64.

반환값

  • 1 — 캡이 S2 포인트 인덱스를 포함하는 경우. UInt8.
  • 0 — 캡이 S2 포인트 인덱스를 포함하지 않는 경우. UInt8.

예제

쿼리:

SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;

결과:

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

s2CapUnion

주어진 두 입력 캡(cap)을 모두 포함하는 가장 작은 캡을 계산합니다. 캡은 평면에 의해 잘려 나간 구의 일부를 나타냅니다. 구 위의 한 점과 도 단위의 반지름으로 정의됩니다.

구문

s2CapUnion(center1, radius1, center2, radius2)

인수

  • center1, center2 — 두 입력 캡(cap)에 해당하는 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 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현됩니다.

Syntax

s2RectAdd(s2pointLow, s2pointHigh, s2Point)

인수

  • s2PointLow — 사각형에 해당하는 낮은 S2 포인트 인덱스입니다. UInt64.
  • s2PointHigh — 사각형에 해당하는 높은 S2 포인트 인덱스입니다. UInt64.
  • s2Point — 경계 사각형을 확장하여 포함해야 하는 대상 S2 포인트 인덱스입니다. UInt64.

반환 값

  • s2PointLow — 확장된 사각형에 해당하는 낮은 S2 셀 ID입니다. UInt64.
  • s2PointHigh — 확장된 사각형에 해당하는 높은 S2 셀 ID입니다. UInt64.

예시

쿼리:

SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;

결과:

┌─rectAdd───────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectContains

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

구문

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 시스템에서 사각형은 위도-경도 공간의 사각형을 나타내는 S2LatLngRect라는 S2Region 타입으로 표현됩니다.

Syntax

s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

인수

  • s2Rect1PointLow, s2Rect1PointHi — 첫 번째 사각형에 해당하는 하위 및 상위 S2 포인트 인덱스입니다. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — 두 번째 사각형에 해당하는 하위 및 상위 S2 포인트 인덱스입니다. UInt64.

반환 값

  • s2UnionRect2PointLow — 합집합 사각형에 해당하는 하위 S2 셀 ID입니다. UInt64.
  • s2UnionRect2PointHi — 합집합 사각형에 해당하는 상위 S2 셀 ID입니다. UInt64.

예시

쿼리:

SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;

결과:

┌─rectUnion─────────────────────────────────┐
│ (5179062030687166815,5177056748191934217) │
└───────────────────────────────────────────┘

s2RectIntersection

이 사각형과 주어진 사각형의 교집합을 포함하는 최소 사각형을 반환합니다. S2 시스템에서는 사각형을 위도-경도 공간의 사각형을 나타내는 S2Region 타입인 S2LatLngRect로 표현합니다.

구문

s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

인수

  • s2Rect1PointLow, s2Rect1PointHi — 첫 번째 사각형에 해당하는 낮은 S2 포인트 인덱스와 높은 S2 포인트 인덱스입니다. UInt64.
  • s2Rect2PointLow, s2Rect2PointHi — 두 번째 사각형에 해당하는 낮은 S2 포인트 인덱스와 높은 S2 포인트 인덱스입니다. UInt64.

반환 값

  • s2UnionRect2PointLow — 주어진 사각형들의 교차 영역을 포함하는 사각형의 낮은 S2 셀 ID입니다. UInt64.
  • s2UnionRect2PointHi — 주어진 사각형들의 교차 영역을 포함하는 사각형의 높은 S2 셀 ID입니다. UInt64.

예시

쿼리:

SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;

결과:

┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘