ClickHouse/docs/zh/query_language/functions/geo.md
2019-06-05 16:54:36 +08:00

3.3 KiB
Raw Blame History

GEO函数

greatCircleDistance

使用great-circle distance公式计算地球表面两点之间的距离。

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)
┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐
│                                                14132374.194975413 │
└───────────────────────────────────────────────────────────────────┘

pointInEllipses

检查指定的点是否至少包含在一个指定的椭圆中。

pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ)

输入参数

  • x, y — 平面上某个点的坐标。
  • xᵢ, yᵢ — 第i个椭圆的中心坐标。
  • aᵢ, bᵢ — 第i个椭圆的轴单位米。

输入参数的个数必须是2+4⋅n,其中n是椭圆的数量。

返回值

如果该点至少包含在一个椭圆中,则返回1;否则,则返回0

示例

SELECT pointInEllipses(55.755831, 37.617673, 55.755831, 37.617673, 1.0, 2.0)
┌─pointInEllipses(55.755831, 37.617673, 55.755831, 37.617673, 1., 2.)─┐
│                                                                   1 │
└─────────────────────────────────────────────────────────────────────┘

pointInPolygon

检查指定的点是否包含在指定的多边形中。

pointInPolygon((x, y), [(a, b), (c, d) ...], ...)

输入参数

  • (x, y) — 平面上某个点的坐标。Tuple类型,包含坐标的两个数字。
  • [(a, b), (c, d) ...] — 多边形的顶点。Array类型。每个顶点由一对坐标(a, b)表示。顶点可以按顺时针或逆时针指定。顶点的个数应该大于等于3。同时只能是常量的。
  • 该函数还支持镂空的多边形(切除部分)。如果需要,可以使用函数的其他参数定义需要切除部分的多边形。(The function does not support non-simply-connected polygons.)

返回值

如果坐标点存在在多边形范围内,则返回1。否则返回0。 如果坐标位于多边形的边界上,则该函数可能返回1,或可能返回0

示例

SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res
┌─res─┐
│   1 │
└─────┘

来源文章