メインコンテンツへスキップ
メインコンテンツへスキップ

S2 インデックスを扱うための関数

S2Index

S2 は、すべての地理データを球体(地球儀に似た形)上で表現する地理インデックスシステムです。

S2 ライブラリでは、点は S2 インデックスとして表現されます。これは、従来の (緯度, 経度) の組とは異なり、単位球の表面上の点を内部的にエンコードした数値表現です。(緯度, 経度) 形式で指定されたある点に対して S2 ポイントインデックスを取得するには、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 s2座標;

結果:

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

s2GetNeighbors

指定された S2 に対応する S2 近傍インデックスを返します。S2 システム内の各セルは、4 本の測地線で囲まれた四辺形となっています。そのため、各セルには 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

2 つの S2 セルが交差しているかどうかを判定します。

構文

s2CellsIntersect(s2index1, s2index2)

引数

  • siIndex1, s2index2 — S2 インデックス。UInt64

戻り値

  • 1 — セルが交差している場合。UInt8
  • 0 — セルが交差していない場合。UInt8

クエリ:

SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;

結果:

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

s2CapContains

キャップが S2 ポイントを含むかどうかを判定します。キャップは、平面によって切り取られた球の一部を表します。球面上の 1 点と、度(degree)単位の半径によって定義されます。

構文

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

指定された 2 つの入力キャップの両方を含む、最小のキャップを求めます。キャップは、平面で切り取られた球面の一部を表します。球面上の 1 点と、度単位の半径によって定義されます。

構文

s2CapUnion(center1, radius1, center2, radius2)

引数

  • center1, center2 — 2 つの入力キャップに対応する S2 ポイントインデックス。UInt64
  • radius1, radius2 — 2 つの入力キャップの半径(度単位)。Float64

戻り値

  • center — 2 つの入力キャップを含む最小キャップの中心に対応する S2 ポイントインデックス。UInt64
  • radius — 2 つの入力キャップを含む最小キャップの半径。Float64

クエリ:

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

結果:

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

s2RectAdd

与えられた S2 ポイントを含めるように、バウンディング長方形のサイズを拡大します。S2 システムでは、長方形は緯度経度空間における長方形を表す S2LatLngRect という S2Region 型で表されます。

構文

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 システムでは、長方形は緯度・経度空間上の長方形を表す 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 — 2 番目の長方形に対応する S2 ポイントのインデックスの下限値および上限値。UInt64

戻り値

  • s2UnionRect2PointLow — 和集合となる長方形に対応する S2 セル ID の下限値。UInt64
  • s2UnionRect2PointHi — 和集合となる長方形に対応する S2 セル ID の上限値。UInt64

クエリ:

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

結果:

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

s2RectIntersection

この矩形と指定された矩形との交差部分全体を含む、最小の矩形を返します。S2 システムでは、矩形は緯度・経度空間の矩形を表す S2LatLngRect という種類の S2Region で表現されます。

構文

s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)

引数

  • s2Rect1PointLow, s2Rect1PointHi — 第1の矩形に対応する Low および High の S2 ポイントインデックス。UInt64
  • s2Rect2PointLow, s2Rect2PointHi — 第2の矩形に対応する Low および High の S2 ポイントインデックス。UInt64

返される値

  • s2UnionRect2PointLow — 指定された矩形同士の共通部分を含む矩形に対応する Low S2 セル ID。UInt64
  • s2UnionRect2PointHi — 指定された矩形同士の共通部分を含む矩形に対応する High S2 セル ID。UInt64

クエリ:

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

結果:

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