ClickHouse/docs/ja/sql-reference/functions/geo/s2.md
2024-11-18 11:58:58 +09:00

372 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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) │
└──────────────────────────────────────────┘
```