# 地理空间函数

# greatCircleDistance

使用大圆公式计算地球表面上两点之间的距离。

greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

输入参数

  • lon1Deg — 第一个点的经度,以度为单位。范围:[-180°, 180°]
  • lat1Deg — 第一个点的纬度,以度为单位。范围:[-90°, 90°]
  • lon2Deg — 第二个点的经度,以度为单位。范围:[-180°, 180°]
  • lat2Deg — 第二个点的纬度,以度为单位。范围:[-90°, 90°]
  • 正值对应北纬和东经,负值对应南纬和西经。

返回值

  • 两点之间的地球表面距离,以米为单位。
  • 当输入参数值超出范围时,会生成异常。

示例

SELECT greatCircleDistance(55.755831, 37.617673, 55.755831, 37.617673) AS greatCircleDistance
┌─greatCircleDistance─┐
│                   0 │
└─────────────────────┘

# geoDistance

greatCircleDistance 类似,但在计算距离时使用 WGS-84 椭球体而不是球体。这是对地球大地水准面的更精确近似。性能与 greatCircleDistance 相同(没有性能损失)。建议使用 geoDistance 来计算地球上的距离。

技术说明:对于足够接近的点,我们使用在坐标中点的切平面上的度量来计算距离。

geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)

输入参数

  • lon1Deg — 第一个点的经度,以度为单位。范围:[-180°, 180°]
  • lat1Deg — 第一个点的纬度,以度为单位。范围:[-90°, 90°]
  • lon2Deg — 第二个点的经度,以度为单位。范围:[-180°, 180°]
  • lat2Deg — 第二个点的纬度,以度为单位。范围:[-90°, 90°]
  • 正值对应北纬和东经,负值对应南纬和西经。

返回值

  • 两点之间的地球表面距离,以米为单位。
  • 当输入参数值超出范围时,会生成异常。

示例

SELECT geoDistance(38.8976, 77.0366, 39.9496, 75.1503) AS geoDistance
┌─geoDistance─┐
│ 212458.73   │
└─────────────┘

# H3

获取索引:https://wolf-h3-viewer.glitch.me (opens new window)

  • (8831aa5039fffff)16 = (613363270285262847)10

检查有效性 h3IsValid(h3index)

SELECT h3IsValid(613363270285262847) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

H3 索引转换为经度和纬度 h3ToGeo(h3Index)

SELECT h3ToGeo(613363270285262847) AS coordinates;
┌─coordinates───────────────────────────┐
│(116.29523629955709,39.984633235997315)│
└───────────────────────────────────────┘

转换为顶点数组 h3ToGeoBoundary

SELECT h3ToGeoBoundary(613363270285262847) AS coordinates;
┌─coordinates──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(39.98791325592796,116.2925333574096),(39.98386803718472,116.29020686993137),(39.98058822646115,116.29290984546513),(39.98135339622932,116.297938782017),(39.98539816328819,116.30026548576008),(39.98867821224181,116.29756303675612)] │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

# h3IsValid

验证数字是否为有效的 H3 (opens new window) 索引。

h3IsValid(h3index)

参数

h3index — 六边形索引号。类型:UInt64。

返回值

  • 1 — 数字是有效的 H3 索引。
  • 0 — 数字不是有效的 H3 索引。
  • 类型:UInt8。

示例

SELECT h3IsValid(617301318803390464) AS h3IsValid;
┌─h3IsValid─┐
│ 1         │
└───────────┘

# h3ToGeo

返回与提供的 H3 (opens new window) 索引对应的质心经度和纬度。

h3ToGeo(h3Index)

参数

h3Index — H3 索引。UInt64。

返回值

由两个值组成的元组:tuple(lon,lat)lon — 经度。Float64。lat — 纬度。Float64。

示例

SELECT h3ToGeo(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────┐
│ (35.537867206326645,54.20746993771632)│
└───────────────────────────────────────┘

# h3ToGeoBoundary

返回与提供的 H3 索引对应的边界的 (lon, lat) 数组。

h3ToGeoBoundary(h3Index)

参数

h3Index — H3 索引。类型:UInt64。

返回值

(lon, lat) 对组成的数组。类型:Array(Float64, Float64)。

示例

SELECT h3ToGeoBoundary(617301318803390464) AS coordinates;
┌─coordinates───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [(54.20668646205218,35.53529359582246),(54.20566163343774,35.537605905213915),(54.20644505711934,35.54017955058831),(54.208253376128475,35.54044097223983),(54.209278241418595,35.53812853031426),(54.20849475102178,35.535554799273164)] │
└────────────────────────────────────────────────────────────────