H3函数

更新时间:2024-10-18 07:43:27

如果您想要基于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网格编码,类型为LONGSTRING。

示例

  • 示例一:输入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网格编码,类型为LONGSTRING。

示例

  • 示例一:判断输入的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网格编码,类型为LONGSTRING。

示例

  • 示例一:输入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网格编码,类型为LONGSTRING。

示例

  • 示例一:输入两个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]。

示例

  • 示例一:输入类型为LONGH3网格编码,返回0层级下所有父网格的网格编码。

    SELECT H3_CellToParent(599686042433355775, 0) AS parent;

    返回结果:

    +--------------------+
    |       parent       |
    +--------------------+
    | 577199624117288959 |
    +--------------------+
  • 示例二:输入类型为STRINGH3网格编码,返回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网格编码,类型为LONGSTRING。

resolution

指定的网格层级,取值范围:(指定的网格编码的层级~15]。假设H3Cell的层级为5,则resolution的取值范围为(5~15]。

示例

  • 示例一:输入类型为LONGH3网格编码,指定网格层级为6,返回在该层级下所有子网格的网格编码。

    SELECT H3_CellToChildren(599686042433355775, 6) AS children;

    返回结果:

    +--------------------------------+
    |            children            |
    +--------------------------------+
    | [604189641121202175,           |
    | 604189641255419903,            |
    | 604189641389637631,            |
    | 604189641523855359,            |
    | 604189641658073087,            |
    | 604189641792290815,            |
    | 604189641926508543]            |
    +--------------------------------+
  • 示例二:输入类型为STRINGH3网格编码,指定网格层级为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网格编码,类型为LONGSTRING。

说明

startCell的类型必须与endCell保持一致。

endCell

终点H3网格编码,类型为LONGSTRING。

说明

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或不合法,则返回空数组。如果输入的网格距离k0,则返回网格本身。

语法

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

参数说明

参数名称

描述

参数名称

描述

H3Cell

H3网格编码,类型为LONGSTRING。

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网格编码,类型为LONGSTRING。

说明

startCellendCell的类型必须保持一致。

endCell

终点H3网格编码,类型为LONGSTRING。

说明

endCellstartCell的类型必须保持一致。

示例

  • 示例一:输入两个类型为LONGH3网格编码,返回网格中心点在二维平面上的欧式距离。

    SELECT H3_distance(587769229395099647, 587026509290536959) as distance;

    返回结果:

    +-------------------+
    |     distance      |
    +-------------------+
    | 4.489061432072522 |
    +-------------------+
  • 示例二:输入两个类型为STRINGH3网格编码,返回网格中心点在二维平面上的欧式距离。

    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网格编码,类型为LONGSTRING。

说明

startCellendCell的类型必须保持一致。

endCell

终点H3网格编码,类型为LONGSTRING。

说明

endCellstartCell的类型必须保持一致。

示例

  • 示例一:输入两个类型为LONGH3网格编码,返回网格中心点在WGS84坐标系下的球面距离。

    SELECT H3_DistanceSphere(587769229395099647, 587026509290536959) as distance;

    返回结果:

    +--------------------+
    |      distance      |
    +--------------------+
    | 497180.06581361144 |
    +--------------------+
  • 示例二:输入两个类型为STRINGH3网格编码,返回网格中心点在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       |
    +----------+

  • 本页导读 (1)
  • 引擎与版本
  • 函数列表
  • 导入及转换
  • H3
  • H3_H3ToString
  • H3_StringToH3
  • H3_PolygonToCells
  • 导出
  • H3_CellToBoundary
  • 网格判断
  • H3_IsValidCell
  • H3_GetResolution
  • H3_AreNeighborCells
  • H3_Contains
  • 网格操作
  • H3_CellToParent
  • H3_CellToChildren
  • 网格查询
  • H3_GridPathCells
  • H3_GridDisk
  • 距离计算
  • H3_Distance
  • H3_DistanceSphere
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等