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

H3インデックスでの作業に関する関数

H3 インデックス

H3は、地球の表面を均等な六角形のセルのグリッドに分割する地理的インデックスシステムです。このシステムは階層的であり、最上位レベルの各六角形(「親」)は、7つの均等で小さな六角形(「子」)に分割されます。

階層のレベルはresolutionと呼ばれ、0から15までの値を受け取ることができ、0は最大かつ最も粗いセルを持つbaseレベルです。

緯度と経度のペアは、64ビットのH3インデックスに変換され、グリッドセルを特定します。

H3インデックスは、主に位置をバケット化したり、他の空間操作に使用されます。

H3システムの完全な説明は、Uber Engineeringサイトで入手可能です。

h3IsValid

番号が有効なH3インデックスかどうかを確認します。

構文

h3IsValid(h3index)

**パラメータ**

- `h3index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 1 — この番号は有効なH3インデックスです。 [UInt8](../../data-types/int-uint.md)。
- 0 — この番号は無効なH3インデックスです。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3IsValid(630814730351855103) AS h3IsValid;

結果:

```text
┌─h3IsValid─┐
│         1 │
└───────────┘

## h3GetResolution \{#h3getresolution}

指定された[H3](#h3-index)インデックスの解像度を定義します。

**構文**

```sql
h3GetResolution(h3index)

**パラメータ**

- `h3index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。
- インデックスが無効な場合、関数はランダム値を返します。[h3IsValid](#h3isvalid)でインデックスを確認してください。[UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3GetResolution(639821929606596015) AS resolution;

結果:

```text
┌─resolution─┐
│         14 │
└────────────┘

## h3EdgeAngle \{#h3edgeangle}

[H3](#h3-index)の六角形のエッジの平均長さをグレードで計算します。

**構文**

```sql
h3EdgeAngle(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 [UInt8](../../data-types/int-uint.md)。 範囲: `[0, 15]`。

**返される値**

- [H3](#h3-index)の六角形のエッジの平均長さをグレードで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3EdgeAngle(10) AS edgeAngle;

結果:

```text
┌───────h3EdgeAngle(10)─┐
│ 0.0005927224846720883 │
└───────────────────────┘

## h3EdgeLengthM \{#h3edgelengthm}

[H3](#h3-index)の六角形のエッジの平均長さをメートルで計算します。

**構文**

```sql
h3EdgeLengthM(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 [UInt8](../../data-types/int-uint.md)。 範囲: `[0, 15]`。

**返される値**

- [H3](#h3-index)の六角形のエッジの平均長さをメートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3EdgeLengthM(15) AS edgeLengthM;

結果:

```text
┌─edgeLengthM─┐
│ 0.509713273 │
└─────────────┘

## h3EdgeLengthKm \{#h3edgelengthkm}

[H3](#h3-index)の六角形のエッジの平均長さをキロメートルで計算します。

**構文**

```sql
h3EdgeLengthKm(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 [UInt8](../../data-types/int-uint.md)。 範囲: `[0, 15]`。

**返される値**

- [H3](#h3-index)の六角形のエッジの平均長さをキロメートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3EdgeLengthKm(15) AS edgeLengthKm;

結果:

```text
┌─edgeLengthKm─┐
│  0.000509713 │
└──────────────┘

## geoToH3 \{#geotoh3}

指定した解像度で[H3](#h3-index)ポイントインデックス`(lat, lon)`を返します。

**構文**

```sql
geoToH3(lat, lon, resolution)

**引数**

- `lat` — 緯度。 [Float64](../../data-types/float.md)。
- `lon` — 経度。 [Float64](../../data-types/float.md)。
- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- エラーの場合は0を返します。 [UInt64](../../data-types/int-uint.md)。

注: ClickHouse v25.4以前では、`geoToH3()`は`(lon, lat)`の順序で値を受け取ります。ClickHouse v25.5以降では、入力値は`(lat, lon)`の順序であります。以前の動作は、設定`geotoh3_argument_order = 'lon_lat'`を使用することで復元できます。

**例**

クエリ:

```sql
SELECT geoToH3(55.71290588, 37.79506683, 15) AS h3Index;

結果:

```text
┌────────────h3Index─┐
│ 644325524701193974 │
└────────────────────┘

## h3ToGeo \{#h3togeo}

指定された[H3](#h3-index)インデックスに対応する重心の緯度と経度を返します。

**構文**

```sql
h3ToGeo(h3Index)

**引数**

- `h3Index` — H3インデックス。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 2つの値から成るタプル:`tuple(lat,lon)`。 `lat` — 緯度。 [Float64](../../data-types/float.md)。 `lon` — 経度。 [Float64](../../data-types/float.md)。

注: ClickHouse v24.12以前では、`h3ToGeo()`は`(lon, lat)`の順序で値を返します。ClickHouse v25.1以降、返された値は`(lat, lon)`の順序です。以前の動作は、設定`h3togeo_lon_lat_result_order = true`を使用して復元できます。

**例**

クエリ:

```sql
SELECT h3ToGeo(644325524701193974) AS coordinates;

結果:

```text
┌─coordinates───────────────────────────┐
│ (55.71290243145668,37.79506616830252) │
└───────────────────────────────────────┘

## h3ToGeoBoundary \{#h3togeoboundary}

提供されたH3インデックスの境界に対応する`(lat, lon)`ペアの配列を返します。

**構文**

```sql
h3ToGeoBoundary(h3Index)

**引数**

- `h3Index` — H3インデックス。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- `(lat, lon)`のペアの配列。 [Array](../../data-types/array.md)([Float64](../../data-types/float.md), [Float64](../../data-types/float.md))。

**例**

クエリ:

```sql
SELECT h3ToGeoBoundary(644325524701193974) AS coordinates;

結果:

```text
┌─h3ToGeoBoundary(599686042433355775)────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(37.2713558667319,-121.91508032705622),(37.353926450852256,-121.8622232890249),(37.42834118609435,-121.92354999630156),(37.42012867767779,-122.03773496427027),(37.33755608435299,-122.090428929044),(37.26319797461824,-122.02910130919001)] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

## h3kRing \{#h3kring}

指定した六角形から半径`k`以内のすべての[H3](#h3-index)六角形をランダム順でリストします。

**構文**

```sql
h3kRing(h3index, k)

**引数**

- `h3index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `k` — 半径。 [integer](../../data-types/int-uint.md)

**返される値**

- H3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
SELECT arrayJoin(h3kRing(644325529233966508, 1)) AS h3index;

結果:

```text
┌────────────h3index─┐
│ 644325529233966508 │
│ 644325529233966497 │
│ 644325529233966510 │
│ 644325529233966504 │
│ 644325529233966509 │
│ 644325529233966355 │
│ 644325529233966354 │
└────────────────────┘

## h3GetBaseCell \{#h3getbasecell}

[H3](#h3-index)インデックスのベースセル番号を返します。

**構文**

```sql
h3GetBaseCell(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 六角形ベースセル番号。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3GetBaseCell(612916788725809151) AS basecell;

結果:

```text
┌─basecell─┐
│       12 │
└──────────┘

## h3HexAreaM2 \{#h3hexaream2}

指定された解像度における六角形の平均面積を平方メートルで返します。

**構文**

```sql
h3HexAreaM2(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 面積を平方メートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3HexAreaM2(13) AS area;

結果:

```text
┌─area─┐
│ 43.9 │
└──────┘

## h3HexAreaKm2 \{#h3hexareakm2}

指定された解像度における六角形の平均面積を平方キロメートルで返します。

**構文**

```sql
h3HexAreaKm2(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 面積を平方キロメートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3HexAreaKm2(13) AS area;

結果:

```text
┌──────area─┐
│ 0.0000439 │
└───────────┘

## h3IndexesAreNeighbors \{#h3indexesareneighbors}

指定された[H3](#h3-index)インデックスが隣接しているかどうかを返します。

**構文**

```sql
h3IndexesAreNeighbors(index1, index2)

**引数**

- `index1` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `index2` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- `1` — インデックスは隣接しています。 [UInt8](../../data-types/int-uint.md)。
- `0` — インデックスは隣接していません。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3IndexesAreNeighbors(617420388351344639, 617420388352655359) AS n;

結果:

```text
┌─n─┐
│ 1 │
└───┘

## h3ToChildren \{#h3tochildren}

指定された[H3](#h3-index)インデックスの子インデックスの配列を返します。

**構文**

```sql
h3ToChildren(index, resolution)

**引数**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 子H3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
SELECT h3ToChildren(599405990164561919, 6) AS children;

結果:

```text
┌─children───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [603909588852408319,603909588986626047,603909589120843775,603909589255061503,603909589389279231,603909589523496959,603909589657714687] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

## h3ToParent \{#h3toparent}

指定された[H3](#h3-index)インデックスを含む親(粗い)インデックスを返します。

**構文**

```sql
h3ToParent(index, resolution)

**引数**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 親H3インデックス。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3ToParent(599405990164561919, 3) AS parent;

結果:

```text
┌─────────────parent─┐
│ 590398848891879423 │
└────────────────────┘

## h3ToString \{#h3tostring}

インデックスの`H3Index`表現を文字列表現に変換します。

```sql
h3ToString(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- H3インデックスの文字列表現。 [String](../../data-types/string.md)。

**例**

クエリ:

```sql
SELECT h3ToString(617420388352917503) AS h3_string;

結果:

```text
┌─h3_string───────┐
│ 89184926cdbffff │
└─────────────────┘

## stringToH3 \{#stringtoh3}

文字列表現を`H3Index`(UInt64)表現に変換します。

**構文**

```sql
stringToH3(index_str)

**パラメータ**

- `index_str` — H3インデックスの文字列表現。 [String](../../data-types/string.md)。

**返される値**

- 六角形インデックス番号。 エラーの場合は0を返します。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT stringToH3('89184926cc3ffff') AS index;

結果:

```text
┌──────────────index─┐
│ 617420388351344639 │
└────────────────────┘

## h3GetResolution \{#h3getresolution-1}

[H3](#h3-index)インデックスの解像度を返します。

**構文**

```sql
h3GetResolution(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3GetResolution(617420388352917503) AS res;

結果:

```text
┌─res─┐
│   9 │
└─────┘

## h3IsResClassIII \{#h3isresclassiii}

[H3](#h3-index)インデックスがクラスIIIの方向性を持つ解像度かどうかを返します。

**構文**

```sql
h3IsResClassIII(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- `1` — インデックスはクラスIIIの方向性を持つ解像度です。 [UInt8](../../data-types/int-uint.md)。
- `0` — インデックスはクラスIIIの方向性を持つ解像度ではありません。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3IsResClassIII(617420388352917503) AS res;

結果:

```text
┌─res─┐
│   1 │
└─────┘

## h3IsPentagon \{#h3ispentagon}

この[H3](#h3-index)インデックスが五角形セルを表すかどうかを返します。

**構文**

```sql
h3IsPentagon(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- `1` — インデックスは五角形セルを表します。 [UInt8](../../data-types/int-uint.md)。
- `0` — インデックスは五角形セルを表さない。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3IsPentagon(644721767722457330) AS pentagon;

結果:

```text
┌─pentagon─┐
│        0 │
└──────────┘

## h3GetFaces \{#h3getfaces}

指定された[H3](#h3-index)インデックスによって交差する正二十面体の面を返します。

**構文**

```sql
h3GetFaces(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 指定されたH3インデックスによって交差する正二十面体の面を含む配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
SELECT h3GetFaces(599686042433355775) AS faces;

結果:

```text
┌─faces─┐
│ [7]   │
└───────┘

## h3CellAreaM2 \{#h3cellaream2}

指定された入力H3インデックスに対応する特定のセルの正確な面積を平方メートルで返します。

**構文**

```sql
h3CellAreaM2(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- セルの面積を平方メートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3CellAreaM2(579205133326352383) AS area;

結果:

```text
┌───────────────area─┐
│ 4106166334463.9233 │
└────────────────────┘

## h3CellAreaRads2 \{#h3cellarearads2}

指定された入力H3インデックスに対応する特定のセルの正確な面積を平方ラジアンで返します。

**構文**

```sql
h3CellAreaRads2(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- セルの面積を平方ラジアンで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3CellAreaRads2(579205133326352383) AS area;

結果:

```text
┌────────────────area─┐
│ 0.10116268528089567 │
└─────────────────────┘

## h3ToCenterChild \{#h3tocenterchild}

指定された[H3](#h3-index)の解像度で含まれる中心の子(より細かい)[H3](#h3-index)インデックスを返します。

**構文**

```sql
h3ToCenterChild(index, resolution)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- 指定された[H3](#h3-index)の解像度で含まれる中心の子の[H3](#h3-index)インデックス。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3ToCenterChild(577023702256844799,1) AS centerToChild;

結果:

```text
┌──────centerToChild─┐
│ 581496515558637567 │
└────────────────────┘

## h3ExactEdgeLengthM \{#h3exactedgelengthm}

入力h3インデックスによって表される一方向のエッジの正確な長さをメートルで返します。

**構文**

```sql
h3ExactEdgeLengthM(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 正確なエッジの長さをメートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3ExactEdgeLengthM(1310277011704381439) AS exactEdgeLengthM;;

結果:

```text
┌───exactEdgeLengthM─┐
│ 195449.63163407316 │
└────────────────────┘

## h3ExactEdgeLengthKm \{#h3exactedgelengthkm}

入力h3インデックスによって表される一方向のエッジの正確な長さをキロメートルで返します。

**構文**

```sql
h3ExactEdgeLengthKm(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 正確なエッジの長さをキロメートルで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3ExactEdgeLengthKm(1310277011704381439) AS exactEdgeLengthKm;;

結果:

```text
┌──exactEdgeLengthKm─┐
│ 195.44963163407317 │
└────────────────────┘

## h3ExactEdgeLengthRads \{#h3exactedgelengthrads}

入力h3インデックスによって表される一方向のエッジの正確な長さをラジアンで返します。

**構文**

```sql
h3ExactEdgeLengthRads(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 正確なエッジの長さをラジアンで。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
SELECT h3ExactEdgeLengthRads(1310277011704381439) AS exactEdgeLengthRads;;

結果:

```text
┌──exactEdgeLengthRads─┐
│ 0.030677980118976447 │
└──────────────────────┘

## h3NumHexagons \{#h3numhexagons}

指定された解像度でのユニークなH3インデックスの数を返します。

**構文**

```sql
h3NumHexagons(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- H3インデックスの数。 [Int64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
SELECT h3NumHexagons(3) AS numHexagons;

結果:

```text
┌─numHexagons─┐
│       41162 │
└─────────────┘

## h3PointDistM \{#h3pointdistm}

ペアのGeoCoordポイント(緯度/経度)間の「大円」または「ハーヴァシーン」距離をメートル単位で返します。

**構文**

```sql
h3PointDistM(lat1, lon1, lat2, lon2)

**引数**

- `lat1`, `lon1` — 点1の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。
- `lat2`, `lon2` — 点2の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。

**返される値**

- ハーヴァシーンまたは大円距離(メートル単位)。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
select h3PointDistM(-10.0 ,0.0, 10.0, 0.0) as h3PointDistM;

結果:

```text
┌──────h3PointDistM─┐
│ 2223901.039504589 │
└───────────────────┘

## h3PointDistKm \{#h3pointdistkm}

ペアのGeoCoordポイント(緯度/経度)間の「大円」または「ハーヴァシーン」距離をキロメートル単位で返します。

**構文**

```sql
h3PointDistKm(lat1, lon1, lat2, lon2)

**引数**

- `lat1`, `lon1` — 点1の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。
- `lat2`, `lon2` — 点2の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。

**返される値**

- ハーヴァシーンまたは大円距離(キロメートル単位)。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
select h3PointDistKm(-10.0 ,0.0, 10.0, 0.0) as h3PointDistKm;

結果:

```text
┌─────h3PointDistKm─┐
│ 2223.901039504589 │
└───────────────────┘

## h3PointDistRads \{#h3pointdistrads}

ペアのGeoCoordポイント(緯度/経度)間の「大円」または「ハーヴァシーン」距離をラジアン単位で返します。

**構文**

```sql
h3PointDistRads(lat1, lon1, lat2, lon2)

**引数**

- `lat1`, `lon1` — 点1の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。
- `lat2`, `lon2` — 点2の緯度と経度(度単位)。 [Float64](../../data-types/float.md)。

**返される値**

- ハーヴァシーンまたは大円距離(ラジアン単位)。 [Float64](../../data-types/float.md)。

**例**

クエリ:

```sql
select h3PointDistRads(-10.0 ,0.0, 10.0, 0.0) as h3PointDistRads;

結果:

```text
┌────h3PointDistRads─┐
│ 0.3490658503988659 │
└────────────────────┘

## h3GetRes0Indexes \{#h3getres0indexes}

すべての解像度0のH3インデックスの配列を返します。

**構文**

```sql
h3GetRes0Indexes()

**返される値**

- すべての解像度0のH3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
select h3GetRes0Indexes as indexes ;

結果:

```text
┌─indexes─────────────────────────────────────┐
│ [576495936675512319,576531121047601151,....]│
└─────────────────────────────────────────────┘

## h3GetPentagonIndexes \{#h3getpentagonindexes}

指定された解像度のすべての五角形H3インデックスを返します。

**構文**

```sql
h3GetPentagonIndexes(resolution)

**パラメータ**

- `resolution` — インデックス解像度。 範囲: `[0, 15]`。 [UInt8](../../data-types/int-uint.md)。

**返される値**

- すべての五角形H3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
SELECT h3GetPentagonIndexes(3) AS indexes;

結果:

```text
┌─indexes────────────────────────────────────────────────────────┐
│ [590112357393367039,590464201114255359,590816044835143679,...] │
└────────────────────────────────────────────────────────────────┘

## h3Line \{#h3line}

提供された2つのインデックス間のインデックスのラインを返します。

**構文**

```sql
h3Line(start,end)

**パラメータ**

- `start` — 開始点を表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `end` — 終了点を表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

提供された2つのインデックス間のインデックスの線を表すH3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
 SELECT h3Line(590080540275638271,590103561300344831) as indexes;

結果:

```text
┌─indexes────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [590080540275638271,590080471556161535,590080883873021951,590106516237844479,590104385934065663,590103630019821567,590103561300344831] │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

## h3Distance \{#h3distance}

提供された2つのインデックス間のグリッドセルの距離を返します。

**構文**

```sql
h3Distance(start,end)

**パラメータ**

- `start` — 開始点を表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `end` — 終了点を表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- グリッドセルの数。 [Int64](../../data-types/int-uint.md)。

距離を見つけるのに失敗した場合は負の数を返します。

**例**

クエリ:

```sql
 SELECT h3Distance(590080540275638271,590103561300344831) as distance;

結果:

```text
┌─distance─┐
│        7 │
└──────────┘

## h3HexRing \{#h3hexring}

指定された原点h3インデックスと長さkで中心にある六角形リングのインデックスを返します。

五角形の歪みが発生しなかった場合は0を返します。

**構文**

```sql
h3HexRing(index, k)

**パラメータ**

- `index` — 原点を表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `k` — 距離。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- H3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
 SELECT h3HexRing(590080540275638271, toUInt16(1)) AS hexRing;

結果:

```text
┌─hexRing─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [590080815153545215,590080471556161535,590080677714591743,590077585338138623,590077447899185151,590079509483487231] │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

## h3GetUnidirectionalEdge \{#h3getunidirectionaledge}

提供された原点と宛先に基づいて一方向のエッジH3インデックスを返し、エラー時には0を返します。

**構文**

```sql
h3GetUnidirectionalEdge(originIndex, destinationIndex)

**パラメータ**

- `originIndex` — 原点六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `destinationIndex` — 宛先六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 一方向のエッジ六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
 SELECT h3GetUnidirectionalEdge(599686042433355775, 599686043507097599) as edge;

結果:

```text
┌────────────────edge─┐
│ 1248204388774707199 │
└─────────────────────┘

## h3UnidirectionalEdgeIsValid \{#h3unidirectionaledgeisvalid}

提供されたH3インデックスが有効な一方向のエッジインデックスかどうかを決定します。一方向のエッジの場合は1を、そうでない場合は0を返します。

**構文**

```sql
h3UnidirectionalEdgeisValid(index)

**パラメータ**

- `index` — 六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 1 — H3インデックスは有効な一方向のエッジです。 [UInt8](../../data-types/int-uint.md)。
- 0 — H3インデックスは有効な一方向のエッジではありません。 [UInt8](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
 SELECT h3UnidirectionalEdgeIsValid(1248204388774707199) as validOrNot;

結果:

```text
┌─validOrNot─┐
│          1 │
└────────────┘

## h3GetOriginIndexFromUnidirectionalEdge \{#h3getoriginindexfromunidirectionaledge}

一方向のエッジH3インデックスから原点の六角形インデックスを返します。

**構文**

```sql
h3GetOriginIndexFromUnidirectionalEdge(edge)

**パラメータ**

- `edge` — 一方向のエッジを表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 原点六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
 SELECT h3GetOriginIndexFromUnidirectionalEdge(1248204388774707197) as origin;

結果:

```text
┌─────────────origin─┐
│ 599686042433355773 │
└────────────────────┘

## h3GetDestinationIndexFromUnidirectionalEdge \{#h3getdestinationindexfromunidirectionaledge}

一方向のエッジH3インデックスから宛先の六角形インデックスを返します。

**構文**

```sql
h3GetDestinationIndexFromUnidirectionalEdge(edge)

**パラメータ**

- `edge` — 一方向のエッジを表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

- 宛先六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**例**

クエリ:

```sql
 SELECT h3GetDestinationIndexFromUnidirectionalEdge(1248204388774707197) as destination;

結果:

```text
┌────────destination─┐
│ 599686043507097597 │
└────────────────────┘

## h3GetIndexesFromUnidirectionalEdge \{#h3getindexesfromunidirectionaledge}

提供された一方向のエッジH3インデックスから原点と宛先の六角形インデックスを返します。

**構文**

```sql
h3GetIndexesFromUnidirectionalEdge(edge)

**パラメータ**

- `edge` — 一方向のエッジを表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

2つの値から成るタプル`tuple(origin,destination)`:

- `origin` — 原点六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。
- `destination` — 宛先六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

提供された入力が無効な場合は`(0,0)`を返します。

**例**

クエリ:

```sql
 SELECT h3GetIndexesFromUnidirectionalEdge(1248204388774707199) as indexes;

結果:

```text
┌─indexes─────────────────────────────────┐
│ (599686042433355775,599686043507097599) │
└─────────────────────────────────────────┘

## h3GetUnidirectionalEdgesFromHexagon \{#h3getunidirectionaledgesfromhexagon}

提供されたH3インデックスからのすべての一方向のエッジを提供します。

**構文**

```sql
h3GetUnidirectionalEdgesFromHexagon(index)

**パラメータ**

- `index` — 一方向のエッジを表す六角形インデックス番号。 [UInt64](../../data-types/int-uint.md)。

**返される値**

各一方向のエッジを表すH3インデックスの配列。 [Array](../../data-types/array.md)([UInt64](../../data-types/int-uint.md))。

**例**

クエリ:

```sql
 SELECT h3GetUnidirectionalEdgesFromHexagon(1248204388774707199) as edges;

結果:

```text
┌─edges─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [1248204388774707199,1320261982812635135,1392319576850563071,1464377170888491007,1536434764926418943,1608492358964346879] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

## h3GetUnidirectionalEdgeBoundary \{#h3getunidirectionaledgeboundary}

単方向エッジを定義する座標を返します。

**構文**

```sql
h3GetUnidirectionalEdgeBoundary(index)

**パラメータ**

- `index` — 単方向エッジを表す六角形のインデックス番号。[UInt64](../../data-types/int-uint.md)。

**返される値**

- '(lon, lat)' のペアの配列。[Array](../../data-types/array.md)([Float64](../../data-types/float.md), [Float64](../../data-types/float.md))。

**例**

クエリ:

```sql
 SELECT h3GetUnidirectionalEdgeBoundary(1248204388774707199) as boundary;

結果:

```text
┌─boundary────────────────────────────────────────────────────────────────────────┐
│ [(37.42012867767779,-122.03773496427027),(37.33755608435299,-122.090428929044)] │
└─────────────────────────────────────────────────────────────────────────────────┘