mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-15 19:02:04 +00:00
372 lines
12 KiB
Markdown
372 lines
12 KiB
Markdown
---
|
||
slug: /ja/sql-reference/functions/geo/s2
|
||
sidebar_label: S2 Geometry
|
||
---
|
||
|
||
# S2インデックスを扱うための関数
|
||
|
||
## S2Index
|
||
|
||
[S2](https://s2geometry.io/)は、すべての地理データが三次元の球(地球儀のようなもの)上で表現される地理的インデックスシステムです。
|
||
|
||
S2ライブラリでは、ポイントはS2インデックスとして表されます。これは、伝統的な(緯度、経度)のペアとは異なり、単位球の表面上のポイントを内部的にエンコードする特定の数値です。指定された形式(緯度、経度)で指定されたポイントに対してS2ポイントインデックスを取得するには、[geoToS2](#geotos2)関数を使用します。また、指定されたS2ポイントインデックスに対応する地理座標を取得するには、[s2ToGeo](#s2togeo)関数を使用できます。
|
||
|
||
## geoToS2
|
||
|
||
提供された座標 `(経度、緯度)` に対応する [S2](#s2index) ポイントインデックスを返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
geoToS2(lon, lat)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `lon` — 経度。[Float64](../../data-types/float.md)。
|
||
- `lat` — 緯度。[Float64](../../data-types/float.md)。
|
||
|
||
**返される値**
|
||
|
||
- S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT geoToS2(37.79506683, 55.71290588) AS s2Index;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─────────────s2Index─┐
|
||
│ 4704772434919038107 │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
## s2ToGeo
|
||
|
||
提供された [S2](#s2index) ポイントインデックスに対応する地理座標 `(経度、緯度)` を返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2ToGeo(s2index)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2index` — S2インデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- 2つの値を持つ[タプル](../../data-types/tuple.md):
|
||
- `lon`。 [Float64](../../data-types/float.md)。
|
||
- `lat`。 [Float64](../../data-types/float.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2ToGeo(4704772434919038107) AS s2Coodrinates;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─s2Coodrinates────────────────────────┐
|
||
│ (37.79506681471008,55.7129059052841) │
|
||
└──────────────────────────────────────┘
|
||
```
|
||
|
||
## s2GetNeighbors
|
||
|
||
提供された [S2](#s2index) に対応するS2近傍インデックスを返します。S2システムでは、各セルは4つの測地線に囲まれた四辺形です。そのため、各セルには4つの隣接セルがあります。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2GetNeighbors(s2index)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2index` — S2インデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- 4つの近傍インデックスからなる配列: `array[s2index1, s2index3, s2index2, s2index4]`。[Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2GetNeighbors(5074766849661468672) AS s2Neighbors;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─s2Neighbors───────────────────────────────────────────────────────────────────────┐
|
||
│ [5074766987100422144,5074766712222515200,5074767536856236032,5074767261978329088] │
|
||
└───────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## s2CellsIntersect
|
||
|
||
2つの提供された [S2](#s2index) セルが交差しているかどうかを判断します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2CellsIntersect(s2index1, s2index2)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2index1`, `s2index2` — S2インデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `1` — セルが交差している場合。[UInt8](../../data-types/int-uint.md)。
|
||
- `0` — セルが交差していない場合。[UInt8](../../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2CellsIntersect(9926595209846587392, 9926594385212866560) AS intersect;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─intersect─┐
|
||
│ 1 │
|
||
└───────────┘
|
||
```
|
||
|
||
## s2CapContains
|
||
|
||
キャップがS2ポイントを含むかどうかを判断します。キャップは、球面上に平面によって切り取られた部分を表します。それは球面上の点と度数での半径で定義されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2CapContains(center, degrees, point)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `center` — キャップに対応するS2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `degrees` — キャップの半径(度数)。[Float64](../../data-types/float.md)。
|
||
- `point` — S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `1` — キャップがS2ポイントインデックスを含む場合。[UInt8](../../data-types/int-uint.md)。
|
||
- `0` — キャップがS2ポイントインデックスを含まない場合。[UInt8](../../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2CapContains(1157339245694594829, 1.0, 1157347770437378819) AS capContains;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─capContains─┐
|
||
│ 1 │
|
||
└─────────────┘
|
||
```
|
||
|
||
## s2CapUnion
|
||
|
||
与えられた2つの入力キャップを含む最小のキャップを決定します。キャップは、球面上に平面によって切り取られた部分を表します。それは球面上の点と度数での半径で定義されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2CapUnion(center1, radius1, center2, radius2)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `center1`, `center2` — 2つの入力キャップに対応するS2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `radius1`, `radius2` — 2つの入力キャップの半径(度数)。[Float64](../../data-types/float.md)。
|
||
|
||
**返される値**
|
||
|
||
- `center` — 2つの入力キャップを含む最小キャップの中心に対応するS2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `radius` — 2つの入力キャップを含む最小キャップの半径。[Float64](../../data-types/float.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2CapUnion(3814912406305146967, 1.0, 1157347770437378819, 1.0) AS capUnion;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─capUnion───────────────────────────────┐
|
||
│ (4534655147792050737,60.2088283994957) │
|
||
└────────────────────────────────────────┘
|
||
```
|
||
|
||
## s2RectAdd
|
||
|
||
指定されたS2ポイントを含むようにバウンディング矩形のサイズを拡大します。S2システムでは、矩形は緯度経度空間内の矩形を表す`S2LatLngRect`と呼ばれるタイプのS2Regionによって表現されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2RectAdd(s2pointLow, s2pointHigh, s2Point)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2PointLow` — 矩形に対応する低S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2PointHigh` — 矩形に対応する高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2Point` — バウンド矩形に含まれるべきターゲットS2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `s2PointLow` — 拡大された矩形に対応する低S2セルID。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2PointHigh` — 拡大された矩形に対応する高S2セルID。[UInt64](../../data-types/float.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2RectAdd(5178914411069187297, 5177056748191934217, 5179056748191934217) AS rectAdd;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─rectAdd───────────────────────────────────┐
|
||
│ (5179062030687166815,5177056748191934217) │
|
||
└───────────────────────────────────────────┘
|
||
```
|
||
|
||
## s2RectContains
|
||
|
||
指定された矩形がS2ポイントを含むかどうかを判断します。S2システムでは、矩形は緯度経度空間内の矩形を表す`S2LatLngRect`と呼ばれるタイプのS2Regionによって表現されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2RectContains(s2PointLow, s2PointHi, s2Point)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2PointLow` — 矩形に対応する低S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2PointHigh` — 矩形に対応する高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2Point` — ターゲットS2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `1` — 矩形が指定されたS2ポイントを含む場合。
|
||
- `0` — 矩形が指定されたS2ポイントを含まない場合。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2RectContains(5179062030687166815, 5177056748191934217, 5177914411069187297) AS rectContains;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─rectContains─┐
|
||
│ 0 │
|
||
└──────────────┘
|
||
```
|
||
|
||
## s2RectUnion
|
||
|
||
この矩形と指定された矩形の和を含む最小の矩形を返します。S2システムでは、矩形は緯度経度空間内の矩形を表す`S2LatLngRect`と呼ばれるタイプのS2Regionによって表現されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2RectUnion(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2Rect1PointLow`, `s2Rect1PointHi` — 最初の矩形に対応する低および高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2Rect2PointLow`, `s2Rect2PointHi` — 2番目の矩形に対応する低および高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `s2UnionRect2PointLow` — 和矩形に対応する低S2セルID。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2UnionRect2PointHi` — 和矩形に対応する高S2セルID。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2RectUnion(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectUnion;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─rectUnion─────────────────────────────────┐
|
||
│ (5179062030687166815,5177056748191934217) │
|
||
└───────────────────────────────────────────┘
|
||
```
|
||
|
||
## s2RectIntersection
|
||
|
||
この矩形と指定された矩形の交点を含む最小の矩形を返します。S2システムでは、矩形は緯度経度空間内の矩形を表す`S2LatLngRect`と呼ばれるタイプのS2Regionによって表現されます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
s2RectIntersection(s2Rect1PointLow, s2Rect1PointHi, s2Rect2PointLow, s2Rect2PointHi)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `s2Rect1PointLow`, `s2Rect1PointHi` — 最初の矩形に対応する低および高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2Rect2PointLow`, `s2Rect2PointHi` — 2番目の矩形に対応する低および高S2ポイントインデックス。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**返される値**
|
||
|
||
- `s2UnionRect2PointLow` — 指定された矩形の交点を含む矩形に対応する低S2セルID。[UInt64](../../data-types/int-uint.md)。
|
||
- `s2UnionRect2PointHi` — 指定された矩形の交点を含む矩形に対応する高S2セルID。[UInt64](../../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT s2RectIntersection(5178914411069187297, 5177056748191934217, 5179062030687166815, 5177056748191934217) AS rectIntersection;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─rectIntersection──────────────────────────┐
|
||
│ (5178914411069187297,5177056748191934217) │
|
||
└──────────────────────────────────────────┘
|
||
```
|