H3函数

如果您想要基于H3网格进行高效地空间分析或查询,可以使用Lindorm Ganos时空服务提供的H3函数。H3函数可以帮助您轻松地处理H3网格编码,例如转换编码类型、查询网格关系、查询网格层级、计算网格之间的距离等。本文介绍Lindorm Ganos时空服务支持的所有H3函数。

引擎与版本

  • H3函数仅适用于宽表引擎

  • 宽表引擎版本要求2.6.5及以上版本。如何查看或升级当前版本,请参见宽表引擎版本说明升级小版本

    重要

    如果您的宽表引擎为2.6.5以下版本且无法进行升级,请联系Lindorm技术支持(钉钉号:s0s3eg3)为您升级版本。

函数列表

Lindorm Ganos支持的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网格编码,则返回空字符串。

语法

String H3_H3ToString(Long H3Cell)

参数说明

参数

说明

H3Cell

H3网格编码,类型为LONG。

示例

  • 示例一:将LONG类型的网格编码转换为STRING类型。

    SELECT H3_H3ToString(599686042433355775) AS H3Address;

    返回结果:

    +-----------------+
    |    H3Address    |
    +-----------------+
    | 85283473fffffff |
    +-----------------+
  • 示例二:判断输入是否有效,如果输入为空或是无效的网格编码,则返回空字符串。

    -- 输入无效网格编码
    SELECT H3_H3ToString(0) AS H3Address;
    
    -- 输入为空
    SELECT H3_H3ToString(NULL) AS H3Address;

    返回结果:

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

H3_StringToH3

将STRING类型的H3网格编码转换为LONG类型。如果输入空字符串或无效的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;
    
    -- 输入空字符串
    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或空字符串。若给定的层级与当前网格一致,则返回该网格本身。

说明

在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       |
    +----------+