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

H3 インデックスを操作するための関数

H3インデックス

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

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

緯度と経度のペアは、グリッドセルを識別する64ビットのH3インデックスに変換できます。

H3インデックスは、主に位置を分類したり、他の地理空間操作に使用されます。

H3システムの詳細は、Uber Engineeringサイトでご覧いただけます。

h3IsValid

数が有効なH3インデックスかどうかを検証します。

構文

h3IsValid(h3index)

パラメータ

  • h3index — 六角形インデックス番号。UInt64

返される値

  • 1 — 数は有効なH3インデックスです。UInt8
  • 0 — 数は有効なH3インデックスではありません。UInt8

クエリ:

SELECT h3IsValid(630814730351855103) AS h3IsValid;

結果:

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

h3GetResolution

指定されたH3インデックスの解像度を定義します。

構文

h3GetResolution(h3index)

パラメータ

  • h3index — 六角形インデックス番号。UInt64

返される値

  • インデックス解像度。範囲: [0, 15]UInt8
  • インデックスが無効な場合、関数はランダムな値を返します。h3IsValidを使用してインデックスを検証してください。UInt8

クエリ:

SELECT h3GetResolution(639821929606596015) AS resolution;

結果:

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

h3EdgeAngle

指定されたH3六角形のエッジの平均長さを度で計算します。

構文

h3EdgeAngle(resolution)

パラメータ

  • resolution — インデックス解像度。UInt8。範囲: [0, 15]

返される値

  • 指定されたH3六角形のエッジの平均長さ(度単位)。Float64

クエリ:

SELECT h3EdgeAngle(10) AS edgeAngle;

結果:

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

h3EdgeLengthM

指定されたH3六角形のエッジの平均長さをメートルで計算します。

構文

h3EdgeLengthM(resolution)

パラメータ

  • resolution — インデックス解像度。UInt8。範囲: [0, 15]

返される値

  • 指定されたH3六角形の平均エッジ長さ(メートル単位)。Float64

クエリ:

SELECT h3EdgeLengthM(15) AS edgeLengthM;

結果:

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

h3EdgeLengthKm

指定されたH3六角形のエッジの平均長さをキロメートルで計算します。

構文

h3EdgeLengthKm(resolution)

パラメータ

  • resolution — インデックス解像度。UInt8。範囲: [0, 15]

返される値

  • 指定されたH3六角形のエッジの平均長さ(キロメートル単位)。Float64

クエリ:

SELECT h3EdgeLengthKm(15) AS edgeLengthKm;

結果:

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

geoToH3

指定された解像度のH3ポイントインデックス(lat, lon)を返します。

構文

geoToH3(lat, lon, resolution)

引数

  • lat — 緯度。Float64
  • lon — 経度。Float64
  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • 六角形インデックス番号。UInt64
  • エラーの場合は0を返します。UInt64

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

クエリ:

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

結果:

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

h3ToGeo

提供されたH3インデックスに対応する重心の緯度と経度を返します。

構文

h3ToGeo(h3Index)

引数

  • h3Index — H3インデックス。UInt64

返される値

  • 二つの値からなるタプル: tuple(lat, lon)lat — 緯度。Float64lon — 経度。Float64

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

クエリ:

SELECT h3ToGeo(644325524701193974) AS coordinates;

結果:

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

h3ToGeoBoundary

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

構文

h3ToGeoBoundary(h3Index)

引数

  • h3Index — H3インデックス。UInt64

返される値

クエリ:

SELECT h3ToGeoBoundary(644325524701193974) AS coordinates;

結果:

┌─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六角形をランダムな順序でリストします。

構文

h3kRing(h3index, k)

引数

  • h3index — 六角形インデックス番号。UInt64
  • k — 半径。integer

返される値

クエリ:

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

結果:

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

h3GetBaseCell

指定されたH3インデックスのベースセル番号を返します。

構文

h3GetBaseCell(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 六角形ベースセル番号。UInt8

クエリ:

SELECT h3GetBaseCell(612916788725809151) AS basecell;

結果:

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

h3HexAreaM2

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

構文

h3HexAreaM2(resolution)

パラメータ

  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • 面積(平方メートル単位)。Float64

クエリ:

SELECT h3HexAreaM2(13) AS area;

結果:

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

h3HexAreaKm2

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

構文

h3HexAreaKm2(resolution)

パラメータ

  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • 面積(平方キロメートル単位)。Float64

クエリ:

SELECT h3HexAreaKm2(13) AS area;

結果:

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

h3IndexesAreNeighbors

提供されたH3インデックスが隣接しているかどうかを返します。

構文

h3IndexesAreNeighbors(index1, index2)

引数

  • index1 — 六角形インデックス番号。UInt64
  • index2 — 六角形インデックス番号。UInt64

返される値

  • 1 — インデックスは隣接しています。UInt8
  • 0 — インデックスは隣接していません。UInt8

クエリ:

SELECT h3IndexesAreNeighbors(617420388351344639, 617420388352655359) AS n;

結果:

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

h3ToChildren

指定されたH3インデックスの子インデックスの配列を返します。

構文

h3ToChildren(index, resolution)

引数

  • index — 六角形インデックス番号。UInt64
  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

クエリ:

SELECT h3ToChildren(599405990164561919, 6) AS children;

結果:

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

h3ToParent

指定されたH3インデックスを含む親(より粗い)インデックスを返します。

構文

h3ToParent(index, resolution)

引数

  • index — 六角形インデックス番号。UInt64
  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • 親H3インデックス。UInt64

クエリ:

SELECT h3ToParent(599405990164561919, 3) AS parent;

結果:

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

h3ToString

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

h3ToString(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • H3インデックスの文字列表現。String

クエリ:

SELECT h3ToString(617420388352917503) AS h3_string;

結果:

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

stringToH3

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

構文

stringToH3(index_str)

パラメータ

  • index_str — H3インデックスの文字列表現。String

返される値

  • 六角形インデックス番号。エラーの場合は0を返します。UInt64

クエリ:

SELECT stringToH3('89184926cc3ffff') AS index;

結果:

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

h3GetResolution

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

構文

h3GetResolution(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • インデックス解像度。範囲: [0, 15]UInt8

クエリ:

SELECT h3GetResolution(617420388352917503) AS res;

結果:

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

h3IsResClassIII

H3インデックスがクラスIIIの解像度を持っているかどうかを返します。

構文

h3IsResClassIII(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 1 — インデックスはクラスIIIの解像度を持っています。UInt8
  • 0 — インデックスはクラスIIIの解像度を持っていません。UInt8

クエリ:

SELECT h3IsResClassIII(617420388352917503) AS res;

結果:

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

h3IsPentagon

このH3インデックスが五角形セルを表しているかどうかを返します。

構文

h3IsPentagon(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 1 — インデックスは五角形セルを表しています。UInt8
  • 0 — インデックスは五角形セルを表していません。UInt8

クエリ:

SELECT h3IsPentagon(644721767722457330) AS pentagon;

結果:

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

h3GetFaces

指定されたH3インデックスに交差するアイコサヘドロンの面を返します。

構文

h3GetFaces(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 指定されたH3インデックスに交差するアイコサヘドロンの面を含む配列。Array(UInt64)。

クエリ:

SELECT h3GetFaces(599686042433355775) AS faces;

結果:

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

h3CellAreaM2

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

構文

h3CellAreaM2(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • セルの面積(平方メートル単位)。Float64

クエリ:

SELECT h3CellAreaM2(579205133326352383) AS area;

結果:

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

h3CellAreaRads2

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

構文

h3CellAreaRads2(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • セルの面積(平方ラジアン単位)。Float64

クエリ:

SELECT h3CellAreaRads2(579205133326352383) AS area;

結果:

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

h3ToCenterChild

指定されたH3インデックスに含まれる中心の子(細かい)H3インデックスを指定された解像度で返します。

構文

h3ToCenterChild(index, resolution)

パラメータ

  • index — 六角形インデックス番号。UInt64
  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • 指定されたH3の中に含まれる中心の子のH3インデックス。UInt64

クエリ:

SELECT h3ToCenterChild(577023702256844799,1) AS centerToChild;

結果:

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

h3ExactEdgeLengthM

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

構文

h3ExactEdgeLengthM(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 正確なエッジ長(メートル単位)。Float64

クエリ:

SELECT h3ExactEdgeLengthM(1310277011704381439) AS exactEdgeLengthM;;

結果:

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

h3ExactEdgeLengthKm

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

構文

h3ExactEdgeLengthKm(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 正確なエッジ長(キロメートル単位)。Float64

クエリ:

SELECT h3ExactEdgeLengthKm(1310277011704381439) AS exactEdgeLengthKm;;

結果:

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

h3ExactEdgeLengthRads

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

構文

h3ExactEdgeLengthRads(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 正確なエッジ長(ラジアン単位)。Float64

クエリ:

SELECT h3ExactEdgeLengthRads(1310277011704381439) AS exactEdgeLengthRads;;

結果:

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

h3NumHexagons

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

構文

h3NumHexagons(resolution)

パラメータ

  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • H3インデックスの数。Int64

クエリ:

SELECT h3NumHexagons(3) AS numHexagons;

結果:

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

h3PointDistM

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

構文

h3PointDistM(lat1, lon1, lat2, lon2)

引数

  • lat1, lon1 — ポイント1の緯度と経度(度単位)。Float64
  • lat2, lon2 — ポイント2の緯度と経度(度単位)。Float64

返される値

  • ハーバサインまたは大円距離(メートル単位)。Float64

クエリ:

SELECT h3PointDistM(-10.0 ,0.0, 10.0, 0.0) AS h3PointDistM;

結果:

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

h3PointDistKm

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

構文

h3PointDistKm(lat1, lon1, lat2, lon2)

引数

  • lat1, lon1 — ポイント1の緯度と経度(度単位)。Float64
  • lat2, lon2 — ポイント2の緯度と経度(度単位)。Float64

返される値

  • ハーバサインまたは大円距離(キロメートル単位)。Float64

クエリ:

SELECT h3PointDistKm(-10.0 ,0.0, 10.0, 0.0) AS h3PointDistKm;

結果:

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

h3PointDistRads

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

構文

h3PointDistRads(lat1, lon1, lat2, lon2)

引数

  • lat1, lon1 — ポイント1の緯度と経度(度単位)。Float64
  • lat2, lon2 — ポイント2の緯度と経度(度単位)。Float64

返される値

  • ハーバサインまたは大円距離(ラジアン単位)。Float64

クエリ:

SELECT h3PointDistRads(-10.0 ,0.0, 10.0, 0.0) AS h3PointDistRads;

結果:

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

h3GetRes0Indexes

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

構文

h3GetRes0Indexes()

返される値

  • 解像度0のすべてのH3インデックスの配列。Array(UInt64)。

クエリ:

SELECT h3GetRes0Indexes AS indexes ;

結果:

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

h3GetPentagonIndexes

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

構文

h3GetPentagonIndexes(resolution)

パラメータ

  • resolution — インデックス解像度。範囲: [0, 15]UInt8

返される値

  • すべての五角形H3インデックスの配列。Array(UInt64)。

クエリ:

SELECT h3GetPentagonIndexes(3) AS indexes;

結果:

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

h3Line

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

構文

h3Line(start,end)

パラメータ

  • start — 開始点を表す六角形インデックス番号。UInt64
  • end — 終了点を表す六角形インデックス番号。UInt64

返される値

二つの提供されたインデックス間のインデックスのラインを表すH3インデックスの配列。Array(UInt64)。

クエリ:

SELECT h3Line(590080540275638271,590103561300344831) AS indexes;

結果:

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

h3Distance

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

構文

h3Distance(start,end)

パラメータ

  • start — 開始点を表す六角形インデックス番号。UInt64
  • end — 終了点を表す六角形インデックス番号。UInt64

返される値

  • グリッドセルの数。Int64

距離の計算に失敗した場合は負の数を返します。

クエリ:

SELECT h3Distance(590080540275638271,590103561300344831) AS distance;

結果:

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

h3HexRing

指定された原点h3Indexを中心とした六角形リングのインデックスを返します。

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

構文

h3HexRing(index, k)

パラメータ

  • index — 原点を表す六角形インデックス番号。UInt64
  • k — 距離。UInt64

返される値

クエリ:

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

結果:

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

h3GetUnidirectionalEdge

提供された原点と目的地に基づく一方向エッジH3インデックスを返し、エラーの場合は0を返します。

構文

h3GetUnidirectionalEdge(originIndex, destinationIndex)

パラメータ

  • originIndex — 原点の六角形インデックス番号。UInt64
  • destinationIndex — 目的地の六角形インデックス番号。UInt64

返される値

  • 一方向エッジ六角形インデックス番号。UInt64

クエリ:

SELECT h3GetUnidirectionalEdge(599686042433355775, 599686043507097599) AS edge;

結果:

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

h3UnidirectionalEdgeIsValid

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

構文

h3UnidirectionalEdgeisValid(index)

パラメータ

  • index — 六角形インデックス番号。UInt64

返される値

  • 1 — H3インデックスは有効な一方向エッジです。UInt8
  • 0 — H3インデックスは有効な一方向エッジではありません。UInt8

クエリ:

SELECT h3UnidirectionalEdgeIsValid(1248204388774707199) AS validOrNot;

結果:

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

h3GetOriginIndexFromUnidirectionalEdge

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

構文

h3GetOriginIndexFromUnidirectionalEdge(edge)

パラメータ

  • edge — 一方向エッジを表す六角形インデックス番号。UInt64

返される値

  • 原点の六角形インデックス番号。UInt64

クエリ:

SELECT h3GetOriginIndexFromUnidirectionalEdge(1248204388774707197) AS origin;

結果:

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

h3GetDestinationIndexFromUnidirectionalEdge

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

構文

h3GetDestinationIndexFromUnidirectionalEdge(edge)

パラメータ

  • edge — 一方向エッジを表す六角形インデックス番号。UInt64

返される値

  • 目的地の六角形インデックス番号。UInt64

クエリ:

SELECT h3GetDestinationIndexFromUnidirectionalEdge(1248204388774707197) AS destination;

結果:

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

h3GetIndexesFromUnidirectionalEdge

指定された一方向エッジH3インデックスから原点と目的地の六角形インデックスを返します。

構文

h3GetIndexesFromUnidirectionalEdge(edge)

パラメータ

  • edge — 一方向エッジを表す六角形インデックス番号。UInt64

返される値

二つの値からなるタプルtuple(origin, destination):

  • origin — 原点の六角形インデックス番号。UInt64
  • destination — 目的地の六角形インデックス番号。UInt64

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

クエリ:

SELECT h3GetIndexesFromUnidirectionalEdge(1248204388774707199) AS indexes;

結果:

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

h3GetUnidirectionalEdgesFromHexagon

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

構文

h3GetUnidirectionalEdgesFromHexagon(index)

パラメータ

  • index — 一方向エッジを表す六角形インデックス番号。UInt64

返される値

各一方向エッジを表すH3インデックスの配列。Array(UInt64)。

クエリ:

SELECT h3GetUnidirectionalEdgesFromHexagon(1248204388774707199) AS edges;

結果:

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

h3GetUnidirectionalEdgeBoundary

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

構文

h3GetUnidirectionalEdgeBoundary(index)

パラメータ

  • index — 一方向エッジを表す六角形インデックス番号。UInt64

返される値

クエリ:

SELECT h3GetUnidirectionalEdgeBoundary(1248204388774707199) AS boundary;

結果:

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