# 地理空间函数
# 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)] │
└────────────────────────────────────────────────────────────────