全部產品
Search
文件中心

Lindorm:H3函數

更新時間:Oct 19, 2024

如果您想要基於H3網格進行高效地空間分析或查詢,可以使用Lindorm GanosBase時空服務提供的H3函數。H3函數可以協助您輕鬆地處理H3網格編碼,例如轉換編碼類別型、查詢網格關係、查詢網格層級、計算網格之間的距離等。本文介紹Lindorm GanosBase時空服務支援的所有H3函數。

引擎與版本

  • H3函數僅適用於寬表引擎

  • 寬表引擎版本要求2.6.5及以上版本。如何查看或升級目前的版本,請參見寬表引擎版本說明升級小版本

    重要

    如果您的寬表引擎為2.6.5以下版本且無法進行升級,請聯絡Lindorm支援人員(DingTalk號:s0s3eg3)為您升級版本。

函數列表

Lindorm GanosBase支援的H3函數如下表所示。

函數功能分類

函數

說明

匯入及轉換

H3

將經緯度或座標點轉換為指定層級的H3網格編碼。

H3_H3ToString

將LONG類型的H3網格編碼轉換為對應的STRING類型。

H3_StringToH3

將STRING類型的H3網格編碼轉換為對應的LONG類型。

H3_PolygonToCells

輸出多邊形對象在指定層級下的H3網格編碼數組。

匯出

H3_CellToBoundary

輸出指定H3網格的多邊形邊界。

網格判斷

H3_IsValidCell

判斷輸入的H3網格編碼是否合法。

H3_GetResolution

返回輸入的H3網格編碼的層級。

H3_AreNeighborCells

判斷兩個H3網格在空間上是否鄰近,若鄰近返回true,否則返回false

H3_Contains

判斷H3Cells(H3網格編碼數組)中對應的網格與指定H3網格是否具備內含項目關聯性。

網格操作

H3_CellToParent

輸入H3網格編碼及指定層級,返回在該指定層級下父網格的網格編碼。

H3_CellToChildren

返回H3網格編碼在指定層級下的子網格的網格編碼。

H3 網格查詢

H3_GridPathCells

擷取兩個H3網格之間的路徑。

H3_GridDisk

指定網格距離k,返回與中心網格距離小於等於k的所有H3網格編碼數組。

距離計算

H3_Distance

返回指定兩個H3網格中心點在二維平面上的歐式距離。

H3_DistanceSphere

返回指定兩個H3網格中心點在WGS84座標系下的球面距離。

匯入及轉換

H3

將經緯度或座標點轉換為指定層級的H3網格編碼。

文法

Long H3(Point p)
Long H3(Double lng, Double lat)
Long H3(Point p, Int resolution)
Long H3(Double lng, Double lat, Int resolution)

參數說明

參數

說明

p

座標點,類型為POINT。

lng

經度,類型為DOUBLE。

lat

緯度,類型為DOUBLE。

resolution

網格層級,類型為INT。取值範圍為[0~15],預設值為15。

樣本

SELECT H3(128.2, 20.5) AS H3Cell;
SELECT H3(128.2, 20.5, 15) AS H3Cell;
SELECT H3(ST_MakePoInt(128.2, 20.5)) AS H3Cell;
SELECT H3(ST_MakePoInt(128.2, 20.5),15) AS H3Cell;

以上樣本語句返回結果相同,具體如下:

+--------------------+
|       H3Cell       |
+--------------------+
| 645317832955184368 |
+--------------------+

H3_H3ToString

將LONG類型的H3網格編碼轉換為對應的STRING類型。若輸入NULL或無效的H3網格編碼,則返回Null 字元串。

文法

String H3_H3ToString(Long H3Cell)

參數說明

參數

說明

H3Cell

H3網格編碼,類型為LONG。

樣本

  • 樣本一:將LONG類型的網格編碼轉換為STRING類型。

    SELECT H3_H3ToString(599686042433355775) AS H3Address;

    返回結果:

    +-----------------+
    |    H3Address    |
    +-----------------+
    | 85283473fffffff |
    +-----------------+
  • 樣本二:判斷輸入是否有效,如果輸入為空白或是無效的網格編碼,則返回Null 字元串。

    -- 輸入無效網格編碼
    SELECT H3_H3ToString(0) AS H3Address;
    
    -- 輸入為空白
    SELECT H3_H3ToString(NULL) AS H3Address;

    返回結果:

    +-----------+
    | H3Address |
    +-----------+
    |           |
    +-----------+

H3_StringToH3

將STRING類型的H3網格編碼轉換為LONG類型。如果輸入Null 字元串或無效的H3網格字串,則返回-1

文法

Long H3_StringToH3(string H3Cell)

參數說明

參數

說明

H3Cell

H3網格編碼,類型為STRING。

樣本

  • 樣本一:輸入STRING類型的H3網格編碼,轉換為LONG類型後輸出。

    SELECT H3_StringToH3('85283473fffffff') AS H3Cell;

    返回結果:

    +--------------------+
    |       H3Cell       |
    +--------------------+
    | 599686042433355775 |
    +--------------------+

  • 樣本二:判斷輸入是否有效,如果輸入為空白或是無效的H3網格字串,則返回-1

    -- 輸入無效的H3網格字串
    SELECT H3_StringToH3('abc') AS H3Cell;
    
    -- 輸入Null 字元串
    SELECT H3_StringToH3('') AS H3Cell;

    返回結果:

    +--------+
    | H3Cell |
    +--------+
    | -1     |
    +--------+

H3_PolygonToCells

輸出多邊形對象在指定層級下的H3網格編碼數組。

文法

Set<Long> H3_PolygonToCells(Polygon poly, Int resolution)

參數說明

參數

說明

poly

多邊形對象,類型為POLYGON。

resolution

網格層級,取值範圍為[0~15]。

樣本

輸入合法的多邊形對象,指定H3網格層級為9,輸出該多邊形對象對應的網格編碼數組。

SELECT H3_PolygonToCells(ST_GeomFromText('POLYGON((-122.481889 37.826683,-122.479487 37.808548,-122.474150 37.808904,-122.476510 37.826935,-122.481889 37.826683))'), 9) AS polyCells;

返回結果:

+--------------------------------+
|           polyCells            |
+--------------------------------+
| [617700171225497599,           |
| 617700171167825919,            |
| 617700171168874495,            |
| 617700171167563775,            |
| 617700171168612351,            |
| 617700171168350207,            |
| 617700171177525247,            |
| 617700171188011007,            |
| 617700171176476671]            |
+--------------------------------+

匯出

H3_CellToBoundary

輸出指定H3網格的多邊形邊界。若輸入為空白、NULL或無效的H3網格編碼,則返回空數組。

文法

Set<Point> H3_CellToBoundary(Long H3Cell)
Set<Point> H3_CellToBoundary(string H3Cell)

參數說明

參數

說明

H3Cell

H3網格編碼,類型為LONG或STRING。

樣本

  • 樣本一:輸入STRING類型的H3網格編碼,輸出對應H3網格的多邊形邊界。

    SELECT H3_CellToBoundary('85283473fffffff') AS boundary;

    返回結果:

    +--------------------------------+
    |            boundary            |
    +--------------------------------+
    | [Point (-121.92354999630157    |
    | 37.42834118609436), Point      |
    | (-122.02910130919003           |
    | 37.26319797461824), Point      |
    | (-121.91508032705622           |
    | 37.27135586673191),            |
    | Point (-122.090428929044       |
    | 37.33755608435299), Point      |
    | (-121.86222328902491           |
    | 37.353926450852256),           |
    | Point (-122.03773496427027     |
    | 37.42012867767779)]            |
    +--------------------------------+
  • 樣本二:輸入LONG類型的H3網格編碼,輸出對應H3網格的多邊形邊界。

    SELECT H3_CellToBoundary(599686042433355775) AS boundary;

    返回結果:

    +--------------------------------+
    |            boundary            |
    +--------------------------------+
    | [Point (-121.92354999630157    |
    | 37.42834118609436), Point      |
    | (-122.02910130919003           |
    | 37.26319797461824), Point      |
    | (-121.91508032705622           |
    | 37.27135586673191),            |
    | Point (-122.090428929044       |
    | 37.33755608435299), Point      |
    | (-121.86222328902491           |
    | 37.353926450852256),           |
    | Point (-122.03773496427027     |
    | 37.42012867767779)]            |
    +--------------------------------+
  • 樣本三:輸入為空白、NULL或無效的H3網格編碼,返回空數組。

    -- 輸入為空白
    SELECT H3_CellToBoundary('') AS boundary;
    
    -- 輸入NULL
    SELECT H3_CellToBoundary(NULL) AS boundary;
    
    -- 輸入無效的H3網格編碼
    SELECT H3_CellToBoundary(0) AS boundary;

    返回結果:

    +----------+
    | boundary |
    +----------+
    | []       |
    +----------+

網格判斷

H3_IsValidCell

判斷輸入的H3網格編碼是否合法。若合法返回true,否則返回false。若輸入為空白或NULL,返回false

文法

boolean H3_IsValidCell(Long H3Cell)
boolean H3_IsValidCell(string H3Cell)

參數說明

參數

說明

H3Cell

H3網格編碼,類型為LONG或STRING。

樣本

  • 樣本一:判斷輸入的H3網格編碼是否合法。以下是輸入合法的樣本:

    -- 輸入LONG類型的H3網格編碼
    SELECT H3_IsValidCell(599686042433355775) AS isValid;
    
    -- 輸入STRING類型的H3網格編碼
    SELECT H3_IsValidCell('85283473fffffff') AS isValid;

    返回結果:

    +---------+
    | isValid |
    +---------+
    | true    |
    +---------+
  • 樣本二:判斷輸入的H3網格編碼是否合法。以下是輸入不合法的樣本:

    -- 輸入LONG類型的H3網格編碼
    SELECT H3_IsValidCell(12) AS isValid;
    
    -- 輸入STRING類型的H3網格編碼
    SELECT H3_IsValidCell('abc') AS isValid;

    返回結果:

    +---------+
    | isValid |
    +---------+
    | false   |
    +---------+
  • 樣本三:輸入為空白或NULL,返回false

    -- 輸入為空白
    SELECT H3_IsValidCell('') AS isValid;
    
    -- 輸入NULL
    SELECT H3_IsValidCell(NULL) AS isValid;

    返回結果:

    +---------+
    | isValid |
    +---------+
    | false   |
    +---------+

H3_GetResolution

返回輸入的H3網格編碼的層級。

文法

Int H3_GetResolution(Long H3Cell)
Int H3_GetResolution(string H3Cell)

參數說明

參數

說明

H3Cell

H3網格編碼,類型為LONG或STRING。

樣本

  • 樣本一:輸入LONG格式的H3網格編碼,返回其網格層級。

    SELECT H3_GetResolution(599686042433355775) AS resolution;

    返回結果:

    +------------+
    | resolution |
    +------------+
    | 5          |
    +------------+
  • 樣本二:輸入STRING格式的H3網格編碼,返回其網格層級。

    SELECT H3_GetResolution('85283473fffffff') AS resolution;

    返回結果:

    +------------+
    | resolution |
    +------------+
    | 5          |
    +------------+

H3_AreNeighborCells

判斷兩個H3網格是否在空間上鄰近,若鄰近返回true,否則返回false。若任意一個編碼不合法、為NULL、或兩個編碼層級不同,則返回false

說明

在使用H3_AreNeighborCells函數前,可以先通過H3_GetResolution函數查詢H3網格的層級。H3_GetResolution的使用方法,請參見H3_GetResolution

文法

boolean H3_AreNeighborCells(Long H3Cell1, Long H3Cell2)
boolean H3_AreNeighborCells(string H3Cell1, string H3Cell2)

參數說明

參數

說明

H3Cell1、H3Cell2

H3網格編碼,類型為LONG或STRING。

樣本

  • 樣本一:輸入兩個LONG格式的H3網格編碼,判斷對應的兩個H3網格在空間上是否鄰近。

    SELECT H3_AreNeighborCells(605546022931791871, 605546023066009599) as isNeighbor;

    返回結果:

    +------------+
    | isNeighbor |
    +------------+
    | true       |
    +------------+
  • 樣本二:輸入兩個STRING格式的H3網格編碼,判斷對應的兩個H3網格在空間上是否鄰近。

    SELECT H3_AreNeighborCells('86754e66fffffff','86754e64fffffff') as isNeighbor;

    返回結果:

    +------------+
    | isNeighbor |
    +------------+
    | true       |
    +------------+
  • 樣本三:輸入的H3網格編碼不合法、輸入NULL,或輸入的兩個H3網格層級不同,返回false

    -- 輸入的H3網格編碼不合法
    SELECT H3_AreNeighborCells(1234,5678) as isNeighbor;
    
    -- 任意一個H3網格編碼輸入NULL
    SELECT H3_AreNeighborCells(1234,NULL) as isNeighbor;
    
    -- 輸入的兩個H3網格層級不同,'85283473fffffff'對應的網格層級為5,'87283082bffffff'對應的網格層級為7
    SELECT H3_AreNeighborCells('85283473fffffff','87283082bffffff') as isNeighbor;

    返回結果:

    +------------+
    | isNeighbor |
    +------------+
    | false      |
    +------------+

H3_Contains

判斷H3Cells(H3網格編碼數組)中對應的網格與指定H3網格是否具備內含項目關聯性。

假設H3Cells內某個網格編碼對應的網格為A,指定的H3網格為B。當滿足以下任意一個條件時,返回true

  • AB相同。

  • BA的子網格。

若H3網格編碼不合法或為NULL,則返回false。若H3Cells數組記憶體在不合法網格編碼,在計算時會被忽略,不會報錯。

文法

boolean H3_Contains(Set<Long> H3Cells, Long H3)

參數說明

參數

說明

H3Cells

H3網格編碼數組。

H3

指定的H3網格編碼。

樣本

  • 樣本一:判斷合法的H3Cells中對應的網格與指定H3網格是否具備內含項目關聯性。

    SELECT H3_Contains(H3_PolygonToCells(ST_GeomFromText('POLYGON((-122.481889 37.826683,-122.479487 37.808548,-122.474150 37.808904,-122.476510 37.826935,-122.481889 37.826683))'), 9),H3(-122.47801264775836, 37.81777525405899)) AS isContained;

    返回結果:

    +-------------+
    | isContained |
    +-------------+
    | true        |
    +-------------+

    結果為true,表示具備內含項目關聯性。

  • 樣本二:判斷合法的H3Cells中對應的網格與指定H3網格是否具備內含項目關聯性。

    SELECT H3_Contains(H3_PolygonToCells(ST_GeomFromText('POLYGON((-122.481889 37.826683,-122.479487 37.808548,-122.474150 37.808904,-122.476510 37.826935,-122.481889 37.826683))'), 9), 605546022931791871) AS isContained;

    返回結果:

    +-------------+
    | isContained |
    +-------------+
    | false       |
    +-------------+

    結果為false,表示不具備內含項目關聯性。

  • 樣本三:輸入的H3網格編碼不合法或為NULL,返回false

    -- 輸入的H3網格編碼為NULL
    SELECT H3_Contains(H3_PolygonToCells(ST_GeomFromText('POLYGON((-122.481889 37.826683,-122.479487 37.808548,-122.474150 37.808904,-122.476510 37.826935,-122.481889 37.826683))'), 9), NULL) AS isContained;
    
    -- 輸入的H3網格編碼不合法
    SELECT H3_Contains(H3_PolygonToCells(ST_GeomFromText('POLYGON((-122.481889 37.826683,-122.479487 37.808548,-122.474150 37.808904,-122.476510 37.826935,-122.481889 37.826683))'), 9), 1233453435457) AS isContained;

    返回結果:

    +-------------+
    | isContained |
    +-------------+
    | false       |
    +-------------+

網格操作

H3_CellToParent

輸入H3網格編碼及指定層級,返回指定層級下父網格的網格編碼。

如果輸入的網格編碼不合法,或輸入的層級為當前編碼的子級,則返回-1或Null 字元串。若給定的層級與當前網格一致,則返回該網格本身。

說明

在H3網格中層級的數字越大代表層級越低,例如層級5是層級0的子級。您可以通過H3_GetResolution函數查詢網格的層級。使用方法,請參見H3_GetResolution

文法

Long H3_CellToParent(Long H3Cell, Int resolution)

參數說明

參數名稱

描述

H3Cell

H3網格編碼,類型為LONG。

resolution

指定的網格層級,取值範圍:(0~指定的網格編碼的層級]。假設H3Cell的層級為5,則resolution的取值範圍為(0~5]。

樣本

  • 樣本一:輸入類型為LONG的H3網格編碼,返回0層級下所有父網格的網格編碼。

    SELECT H3_CellToParent(599686042433355775, 0) AS parent;

    返回結果:

    +--------------------+
    |       parent       |
    +--------------------+
    | 577199624117288959 |
    +--------------------+
  • 樣本二:輸入類型為STRING的H3網格編碼,返回5層級下所有父網格的網格編碼。

    SELECT H3_CellToParent(599686042433355775, 5) AS parent;

    返回結果:

    +--------------------+
    |       parent       |
    +--------------------+
    | 599686042433355775 |
    +--------------------+
  • 樣本三:輸入的網格編碼不合法或為NULL,或輸入的層級為當前編碼的子級或NULL,返回-1

    -- 輸入的網格編碼不合法
    SELECT H3_CellToParent(123, 5) AS parent;
    
    -- 輸入的層級為當前編碼的子級
    SELECT H3_CellToParent(599686042433355775, 9) AS parent;
    
    -- 輸入的層級為NULL
    SELECT H3_CellToParent(599686042433355775, NULL) AS parent;
    
    -- 輸入的網格編碼和層級同時為NULL
    SELECT H3_CellToParent(NULL, NULL) AS parent;

    返回結果:

    +--------+
    | parent |
    +--------+
    | -1     |
    +--------+

H3_CellToChildren

返回H3網格編碼在指定層級的所有子網格編碼數組。

如果輸入的網格編碼不合法、或輸入的層級為當前編碼的父級或其本身的層級,則返回空數組。

說明

在H3網格中層級的數字越大代表層級越低,例如層級5是層級0的子級。您可以通過H3_GetResolution函數查詢網格的層級。使用方法,請參見H3_GetResolution

文法

Set<Long> H3_CellToChildren(Long H3Cell, Int resolution)
Set<String> H3_CellToChildren(string H3Cell, Int resolution)

參數說明

參數名稱

描述

H3Cell

H3網格編碼,類型為LONG或STRING。

resolution

指定的網格層級,取值範圍:(指定的網格編碼的層級~15]。假設H3Cell的層級為5,則resolution的取值範圍為(5~15]。

樣本

  • 樣本一:輸入類型為LONG的H3網格編碼,指定網格層級為6,返回在該層級下所有子網格的網格編碼。

    SELECT H3_CellToChildren(599686042433355775, 6) AS children;

    返回結果:

    +--------------------------------+
    |            children            |
    +--------------------------------+
    | [604189641121202175,           |
    | 604189641255419903,            |
    | 604189641389637631,            |
    | 604189641523855359,            |
    | 604189641658073087,            |
    | 604189641792290815,            |
    | 604189641926508543]            |
    +--------------------------------+
  • 樣本二:輸入類型為STRING的H3網格編碼,指定網格層級為6,返回在該層級下所有子網格的網格編碼。

    SELECT H3_CellToChildren('85283473fffffff', 6) AS children;

    返回結果:

    +--------------------------------+
    |            children            |
    +--------------------------------+
    | [86283470fffffff,              |
    | 862834727ffffff,               |
    | 862834737ffffff,               |
    | 862834707ffffff,               |
    | 862834717ffffff,               |
    | 86283471fffffff,               |
    | 86283472fffffff]               |
    +--------------------------------+
  • 樣本三:輸入的網格編碼不合法,或給定的層級為當前編碼的父級或其本身的層級,返回空數組。

    -- 輸入的網格編碼不合法
    SELECT H3_CellToChildren(0,15) AS children;
    
    -- 給定的層級為當前編碼的父級
    SELECT H3_CellToChildren('85283473fffffff', 3) AS children;
    
    -- 給定的層級為當前編碼的層級
    SELECT H3_CellToChildren('85283473fffffff', 5) AS children;

    返回結果:

    +----------+
    | children |
    +----------+
    | []       |
    +----------+

網格查詢

H3_GridPathCells

擷取兩個指定H3網格之間的H3網格路徑,包含起點及終點的兩個H3網格。如果輸入的H3網格編碼不合法,返回空數組;如果輸入的兩個編碼精度不同,返回null

文法

Set<Long> H3_GridPathCells(Long startCell, Long endCell)
Set<String> H3_GridPathCells(String startCell, String endCell)

參數說明

參數名稱

描述

startCell

起點H3網格編碼,類型為LONG或STRING。

說明

startCell的類型必須與endCell保持一致。

endCell

終點H3網格編碼,類型為LONG或STRING。

說明

endCell的類型必須與startCell保持一致。

樣本

  • 樣本一:輸入兩個H3網格編碼,返回兩個網格之間的路徑。

    SELECT H3_GridPathCells(H3(123.1, 25.1, 8),H3(123.2, 25.2, 8)) AS pathCell;

    返回結果:

    +--------------------------------+
    |            pathCell            |
    +--------------------------------+
    | [613820806174081023,           |
    | 613820806136332287,            |
    | 613820806132137983,            |
    | 613820806325075967,            |
    | 613820789795323903,            |
    | 613820789791129599,            |
    | 613820789942124543,            |
    | 613820806163595263,            |
    | 613820806327173119,            |
    | 613820806314590207,            |
    | 613820789986164735,            |
    | 613820789981970431,            |
    | 613820789944221695,            |
    | 613820789940027391,            |
    | 613820789969387519,            |
    | 613820789965193215,            |
    | 613820789709340671,            |
    | 613820789705146367]            |
    +--------------------------------+
  • 樣本二:輸入的H3網格編碼不合法,返回空數組。

    SELECT H3_GridPathCells(587769229395099647, 123) as pathCell;

    返回結果:

    +----------+
    | pathCell |
    +----------+
    | []       |
    +----------+
  • 樣本三:輸入的兩個網格編碼層級不同,返回null

    -- 兩個網格編碼層級不同,587769229395099647的層級為2,599686042433355775的層級為5
    SELECT H3_GridPathCells(587769229395099647, 599686042433355775) as pathCell;

    返回結果:

    +----------+
    | pathCell |
    +----------+
    | null     |
    +----------+

H3_GridDisk

輸入指定H3網格編碼和網格距離k,返回該層級下與指定網格距離小於等於k的所有H3網格編碼數組。假設輸入網格為A,指定k=1,則返回以A為中心的外一圈網格及A網格本身;指定k=2,則返回以A為中心的外兩圈網格及A網格本身,以此類推。

如果輸入的H3網格編碼為NULL或不合法,則返回空數組。如果輸入的網格距離k為0,則返回網格本身。

文法

Set<Long> H3_GridDisk(Long H3Cell, Int k)
Set<String> H3_GridDisk(String H3Cell, Int k)

參數說明

參數名稱

描述

H3Cell

H3網格編碼,類型為LONG或STRING。

k

網格距離。

樣本

  • 樣本一:返回與中心網格距離小於等於1的所有網格編碼。

    SELECT H3_GridDisk(599686042433355775, 1) AS grid;

    返回結果:

    +--------------------------------+
    |              grid              |
    +--------------------------------+
    | [599686015589810175,           |
    | 599686014516068351,            |
    | 599686038138388479,            |
    | 599686042433355775,            |
    | 599686044580839423,            |
    | 599686043507097599,            |
    | 599686030622195711]            |
    +--------------------------------+
  • 樣本二:指定距離為0,返回網格本身。

    SELECT H3_GridDisk(599686042433355775, 0) AS grid;

    返回結果:

    +----------------------+
    |         grid         |
    +----------------------+
    | [599686042433355775] |
    +----------------------+
  • 樣本三:輸入的H3網格為NULL或不合法,返回空數組。

    -- 輸入的H3網格編碼為NULL
    SELECT H3_GridDisk(NULL, 0) AS grid;
    
    -- 輸入的H3網格編碼不合法
    SELECT H3_GridDisk(123456, 0) AS grid;

    返回結果:

    +------+
    | grid |
    +------+
    | []   |
    +------+

距離計算

H3_Distance

返回指定兩個H3網格中心點在二維平面上的歐式距離。如果輸入的H3網格編碼為NULL或不合法、或兩個網格的層級不同,返回-1

文法

Double H3_Distance(Long startCell, Long endCell)
Double H3_Distance(String startCell, String endCell)

參數說明

參數名稱

描述

startCell

起點H3網格編碼,類型為LONG或STRING。

說明

startCellendCell的類型必須保持一致。

endCell

終點H3網格編碼,類型為LONG或STRING。

說明

endCellstartCell的類型必須保持一致。

樣本

  • 樣本一:輸入兩個類型為LONG的H3網格編碼,返回網格中心點在二維平面上的歐式距離。

    SELECT H3_distance(587769229395099647, 587026509290536959) as distance;

    返回結果:

    +-------------------+
    |     distance      |
    +-------------------+
    | 4.489061432072522 |
    +-------------------+
  • 樣本二:輸入兩個類型為STRING的H3網格編碼,返回網格中心點在二維平面上的歐式距離。

    SELECT H3_distance('825897fffffffff','8282cffffffffff') as distance;

    返回結果:

    +-------------------+
    |     distance      |
    +-------------------+
    | 4.489061432072522 |
    +-------------------+
  • 樣本三:輸入的H3網格編碼為NULL或不合法、或兩個網格的層級不同,返回-1

    -- 輸入的H3網格編碼不合法
    SELECT H3_distance(587769229395099647, 345) AS distance;
    
    -- 輸入的H3網格編碼為NULL
    SELECT H3_distance(587769229395099647, NULL) AS distance;
    
    -- 輸入的兩個H3網格層級不同,587769229395099647的層級為2,599686042433355775的層級為5
    SELECT H3_distance(587769229395099647, 599686042433355775) AS distance;

    返回結果:

    +----------+
    | distance |
    +----------+
    | -1       |
    +----------+

H3_DistanceSphere

返回指定兩個H3網格中心點在WGS84座標系下的球面距離,單位為米(m)。如果輸入的H3網格編碼為NULL或不合法、或兩個網格的層級不同,返回-1

文法

Double H3_DistanceSphere(Long startCell, Long endCell)
Double H3_DistanceSphere(String startCell, String endCell)

參數說明

參數名稱

描述

startCell

起點H3網格編碼,類型為LONG或STRING。

說明

startCellendCell的類型必須保持一致。

endCell

終點H3網格編碼,類型為LONG或STRING。

說明

endCellstartCell的類型必須保持一致。

樣本

  • 樣本一:輸入兩個類型為LONG的H3網格編碼,返回網格中心點在WGS84座標系下的球面距離。

    SELECT H3_DistanceSphere(587769229395099647, 587026509290536959) as distance;

    返回結果:

    +--------------------+
    |      distance      |
    +--------------------+
    | 497180.06581361144 |
    +--------------------+
  • 樣本二:輸入兩個類型為STRING的H3網格編碼,返回網格中心點在WGS84座標系下的球面距離。

    SELECT H3_DistanceSphere('825897fffffffff','8282cffffffffff') as distance;

    返回結果:

    +--------------------+
    |      distance      |
    +--------------------+
    | 497180.06581361144 |
    +--------------------+
  • 樣本三:輸入的H3網格編碼為NULL或不合法、或兩個網格的層級不同,返回-1

    -- 輸入的H3網格編碼不合法
    SELECT H3_DistanceSphere(587769229395099647, 345) AS distance;
    
    -- 輸入的H3網格編碼為NULL
    SELECT H3_DistanceSphere(587769229395099647, NULL) AS distance;
    
    -- 輸入的兩個網格層級不同,587769229395099647的層級為2,599686042433355775的層級為5
    SELECT H3_DistanceSphere(587769229395099647, 599686042433355775) AS distance;

    返回結果:

    +----------+
    | distance |
    +----------+
    | -1       |
    +----------+