S2Index
S2は、すべての地理データが球体上に表現される地理インデックスシステムです(地球儀に似ています)。
S2ライブラリでは、ポイントはS2インデックスとして表現され、これはユニットスフィアの表面上のポイントを内部的にエンコードする特定の数値です(従来の(緯度、経度)のペアとは異なります)。指定された(緯度、経度)形式のポイントに対するS2ポイントインデックスを取得するには、geoToS2関数を使用します。また、指定されたS2ポイントインデックスに対応する地理座標を取得するには、s2ToGeo関数を使用できます。
geoToS2
提供された座標 (longitude, latitude)
に対応するS2ポイントインデックスを返します。
構文
引数
戻り値
例
クエリ:
SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;
結果:
┌─────────────s2Index─┐
│ 4704772434919038107 │
└─────────────────────┘
s2ToGeo
提供されたS2ポイントインデックスに対応する地理座標 (longitude, latitude)
を返します。
構文
引数
戻り値
例
クエリ:
SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;
結果:
┌─s2Coodrinates────────────────────────┐
│ (37.79506681471008,55.7129059052841) │
└──────────────────────────────────────┘
s2GetNeighbors
提供されたS2に対応するS2隣接インデックスを返します。S2システムの各セルは四つの測地線によって囲まれた四辺形です。したがって、各セルには4つの隣接があります。
構文
引数
戻り値
- 4つの隣接インデックスからなる配列:
array[s2index1, s2index3, s2index2, s2index4]
。 Array(UInt64)。
例
クエリ:
SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;
結果:
┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
└───────────────────────────────────────────────────────────────────────────────────┘
s2CellsIntersect
提供された2つのS2セルが交差するかどうかを判断します。
構文
s2CellsIntersect(s2index1, s2index2)
引数
s2index1
, s2index2
— S2インデックス。 UInt64。
戻り値
例
クエリ:
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システムでは、矩形は 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システムでは、矩形は 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によって表され、緯度・経度空間内の矩形を表します。
構文
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
— 最初の矩形に対応する低いおよび高いS2ポイントインデックス。 UInt64。
s2Rect2PointLow
, s2Rect2PointHi
— 2番目の矩形に対応する低いおよび高いS2ポイントインデックス。 UInt64。
戻り値
s2UnionRect2PointLow
— 指定された矩形の交差点を含む矩形に対応する低いS2セルID。 UInt64。
s2UnionRect2PointHi
— 指定された矩形の交差点を含む矩形に対応する高いS2セルID。 UInt64。
例
クエリ:
SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;
結果:
┌─rectIntersection──────────────────────────┐
│ (5178914411069187297,5177056748191934217) │
└───────────────────────────────────────────┘