メインコンテンツまでスキップ
メインコンテンツまでスキップ

S2インデックスを利用した関数

S2Index

S2は、すべての地理データが球体上で表現される地理的インデックスシステムです(地球儀に似ています)。

S2ライブラリでは、ポイントはS2インデックスとして表現されます。このインデックスは、従来の(緯度、経度)ペアとは異なり、単位球の表面上のポイントを内部的にエンコードする特定の番号です。指定されたポイント(緯度、経度)についてS2ポイントインデックスを取得するには、geoToS2関数を使用します。また、指定されたS2ポイントインデックスに対応する地理座標を取得するには、s2ToGeo関数を使用できます。

geoToS2

提供された座標(経度, 緯度)に対応するS2ポイントインデックスを返します。

構文

geoToS2(lon, lat)

引数

返される値

  • S2ポイントインデックス。UInt64

クエリ:

SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;

結果:

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

s2ToGeo

提供されたS2ポイントインデックスに対応する地理座標(経度, 緯度)を返します。

構文

s2ToGeo(s2index)

引数

  • s2index — S2インデックス。UInt64

返される値

クエリ:

SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;

結果:

┌─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ポイントを含むかどうかを判断します。キャップは、平面によって切り取られた球の一部を表します。それは、球体上のポイントと度数の半径によって定義されます。

構文

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つの入力キャップを含む最小のキャップを決定します。キャップは、平面によって切り取られた球の一部を表します。それは、球体上のポイントと度数の半径によって定義されます。

構文

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システムでは、矩形は緯度経度空間での矩形を表すS2Regionの一種であるS2LatLngRectによって表されます。

構文

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ポイントインデックスと高いS2ポイントインデックス。UInt64
  • s2Rect2PointLow, s2Rect2PointHi — 2番目の矩形に対応する低いS2ポイントインデックスと高い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 — 2番目の矩形に対応する低いS2ポイントインデックスと高いS2ポイントインデックス。UInt64

返される値

  • s2UnionRect2PointLow — 与えられた矩形の交差部分を含む矩形に対応する低いS2セルID。UInt64
  • s2UnionRect2PointHi — 与えられた矩形の交差部分を含む矩形に対応する高いS2セルID。UInt64

クエリ:

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

結果:

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