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

1510 lines
37 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/h3
sidebar_label: H3 Indexes
title: "H3 インデックスを操作する関数"
---
## H3 インデックス
[H3](https://eng.uber.com/h3/) は地球の表面を均一な六角形のセルのグリッドに分割する地理的インデックスシステムです。このシステムは階層的であり、最上位の六角形「親」を7つの同様でより小さい六角形「子」に分割することができます。
階層のレベルは `resolution` と呼ばれ、`0` から `15` までの値を取ります。`0` が最も大きく、最も粗いセルを持つ `base` レベルです。
緯度と経度のペアは64ビットのH3インデックスに変換され、グリッドセルを特定します。
H3インデックスは主に位置のバケッティングや他の地理空間操作に使用されます。
H3システムの詳細は[Uber Engineeringのサイト](https://eng.uber.com/h3/)で利用可能です。
## h3IsValid
数値が有効な [H3](#h3-index) インデックスであるかどうかを検証します。
**構文**
``` sql
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
指定された [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
[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
[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
[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
指定された解像度で`(lon, lat)`を持つ[H3](#h3-index)ポイントインデックスを返します。
**構文**
``` sql
geoToH3(lon, lat, resolution)
```
**引数**
- `lon` — 経度。[Float64](../../data-types/float.md)。
- `lat` — 緯度。[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)。
**例**
クエリ:
``` sql
SELECT geoToH3(37.79506683, 55.71290588, 15) AS h3Index;
```
結果:
``` text
┌────────────h3Index─┐
│ 644325524701193974 │
└────────────────────┘
```
## h3ToGeo
指定された[H3](#h3-index)インデックスに対応する中心の経度と緯度を返します。
**構文**
``` sql
h3ToGeo(h3Index)
```
**引数**
- `h3Index` — H3インデックス。[UInt64](../../data-types/int-uint.md)。
**返される値**
- 二つの値で構成されるタプル: `tuple(lon,lat)`。 `lon` — 経度。[Float64](../../data-types/float.md)。 `lat` — 緯度。[Float64](../../data-types/float.md)。
**例**
クエリ:
``` sql
SELECT h3ToGeo(644325524701193974) AS coordinates;
```
結果:
``` text
┌─coordinates───────────────────────────┐
│ (37.79506616830252,55.71290243145668) │
└───────────────────────────────────────┘
```
## h3ToGeoBoundary
指定されたH3インデックスの境界に対応する`(lon, lat)`のペアの配列を返します。
**構文**
``` sql
h3ToGeoBoundary(h3Index)
```
**引数**
- `h3Index` — H3インデックス。[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 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
指定された六角形から半径 `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
指定された [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
指定された解像度での六角形の平均面積を平方メートルで返します。
**構文**
``` 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
指定された解像度での六角形の平均面積を平方キロメートルで返します。
**構文**
``` 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
提供された [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
指定された [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
指定された [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
`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
文字列表現を `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
[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
[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
この [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
指定された [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
指定された入力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
指定された入力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
指定された[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
入力された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
入力された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
入力された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
指定された解像度でのユニークな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
緯度/経度ペアの間の「大円」または「ハバース」距離をメートルで返します。
**構文**
``` 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
緯度/経度ペアの間の「大円」または「ハバース」距離をキロメートルで返します。
**構文**
``` 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
緯度/経度ペアの間の「大円」または「ハバース」距離をラジアンで返します。
**構文**
``` 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
解像度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
指定された解像度でのすべての五角形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
提供された二つのインデックス間のインデックスの線を返します。
**構文**
``` sql
h3Line(start,end)
```
**パラメータ**
- `start` — 開始点を表す六角形のインデックス番号。[UInt64](../../data-types/int-uint.md)。
- `end` — 終了点を表す六角形のインデックス番号。[UInt64](../../data-types/int-uint.md)。
**返される値**
提供された二つのインデックス間のインデックスの線を表す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
提供された二つのインデックス間のグリッドセルでの距離を返します。
**構文**
``` 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
指定されたoriginのh3Indexを中心とする六角形のリングのインデックスを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
提供された始点と終点に基づいて一方向エッジの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
提供された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
一方向エッジ 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
一方向エッジ 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
指定された一方向エッジH3インデックスから始点および終点の六角形インデックスを返します。
**構文**
``` sql
h3GetIndexesFromUnidirectionalEdge(edge)
```
**パラメータ**
- `edge` — 一方向エッジを表す六角形のインデックス番号。[UInt64](../../data-types/int-uint.md)。
**返される値**
始点と終点のインデックスを含むタプル`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
提供された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
一方向エッジを定義する座標を返します。
**構文**
``` 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)] │
└─────────────────────────────────────────────────────────────────────────────────┘
```