地理坐标函数
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─┐
│ 14128352 │
└─────────────────────┘
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 │
└─────────────┘
greatCircleAngle
使用大圆公式计算地球表面上两点之间的中心角。
greatCircleAngle(lon1Deg, lat1Deg, lon2Deg, lat2Deg)
输入参数
lon1Deg
— 第一个点的经度,以度为单位。lat1Deg
— 第一个点的纬度,以度为单位。lon2Deg
— 第二个点的经度,以度为单位。lat2Deg
— 第二个点的纬度,以度为单位。
返回值
两点之间的中心角,以度为单位。
示例
SELECT greatCircleAngle(0, 0, 45, 0) AS arc
┌─arc─┐
│ 45 │
└─────┘
pointInEllipses
检查点是否属于至少一个椭圆。坐标在笛卡尔坐标系中是几何的。
pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ)
输入参数
x, y
— 平面上的一个点的坐标。xᵢ, yᵢ
— 第i
个椭圆中心的坐标。aᵢ, bᵢ
— 第i
个椭圆的轴,以 x, y 坐标的单位表示。
输入参数必须是 2+4⋅n
,其中 n
是椭圆的数量。
返回值
如果点在至少一个椭圆内,则返回 1
;如果点不在椭圆内,则返回 0
。
示例
SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)
┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
│ 1 │
└─────────────────────────────────────────────────┘
pointInPolygon
检查点是否属于平面上的多边形。
pointInPolygon((x, y), [(a, b), (c, d) ...], ...)
输入值
(x, y)
— 平面上的一个点的坐标。数据类型 — 元组 — 由两个数字组成的元组。[(a, b), (c, d) ...]
— 多边形顶点。数据类型 — 数组。每个顶点由一对坐标(a, b)
表示。顶点应按顺时针或逆时针顺序指定。顶点数至少为 3。多边形必须是常量。- 该函数还支持带孔的多边形(切出的部分)。在这种情况下,使用函数的其他参数添加定义切出部分的多边形。该函数不支持非简单连接的多边形。
返回值
如果点在多边形内,则返回 1
,如果点不在多边形内,则返回 0
。如果点在多边形边界上,该函数可能返回 0 或 1。
示例
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
┌─res─┐
│ 1 │
└─────┘