Skip to content

Commit 5d592e9

Browse files
authored
docs: Add Geometry aggregate function docs (#3152)
1 parent 3d2c075 commit 5d592e9

26 files changed

Lines changed: 1032 additions & 0 deletions
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: ST_COLLECT
3+
---
4+
5+
将多个 GEOMETRY 值收集为一个 GEOMETRY 结果。
6+
7+
该函数仅支持 GEOMETRY 类型。
8+
9+
## 语法
10+
11+
```sql
12+
ST_COLLECT(<geometry>)
13+
```
14+
15+
## 参数
16+
17+
| 参数 | 说明 |
18+
|------|------|
19+
| `<geometry>` | GEOMETRY 类型的表达式。 |
20+
21+
## 返回类型
22+
23+
GEOMETRY。根据输入类型不同,返回值可能是 `MULTIPOINT``MULTILINESTRING``MULTIPOLYGON``GEOMETRYCOLLECTION`
24+
25+
:::note
26+
- 会忽略 NULL 输入行。
27+
- 如果所有输入行都是 NULL,则返回 NULL。
28+
- 如果输入 GEOMETRY 的 SRID 不一致,函数会报错。
29+
:::
30+
31+
## 示例
32+
33+
```sql
34+
WITH data AS (
35+
SELECT TO_GEOMETRY('POINT(0 0)') AS g
36+
UNION ALL
37+
SELECT TO_GEOMETRY('LINESTRING(1 1,2 2)')
38+
)
39+
SELECT ST_ASWKT(ST_COLLECT(g)) FROM data;
40+
41+
╭────────────────────────────────────────────────────╮
42+
│ st_aswkt(st_collect(g)) │
43+
├────────────────────────────────────────────────────┤
44+
│ GEOMETRYCOLLECTION(POINT(0 0),LINESTRING(1 1,2 2)) │
45+
╰────────────────────────────────────────────────────╯
46+
```
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: ST_ENVELOPE_AGG
3+
---
4+
5+
对多个 GEOMETRY 值做聚合,返回覆盖所有非 NULL 输入的最小外接矩形。
6+
7+
该函数仅支持 GEOMETRY 类型。
8+
9+
## 语法
10+
11+
```sql
12+
ST_ENVELOPE_AGG(<geometry>)
13+
```
14+
15+
## 参数
16+
17+
| 参数 | 说明 |
18+
|------|------|
19+
| `<geometry>` | GEOMETRY 类型的表达式。 |
20+
21+
## 返回类型
22+
23+
GEOMETRY。
24+
25+
:::note
26+
- 会忽略 NULL 输入行。
27+
- 如果所有输入行都是 NULL,则返回 NULL。
28+
- 如果输入 GEOMETRY 的 SRID 不一致,函数会报错。
29+
:::
30+
31+
## 示例
32+
33+
```sql
34+
WITH data AS (
35+
SELECT TO_GEOMETRY('POINT(1 1)') AS g
36+
UNION ALL
37+
SELECT TO_GEOMETRY('POINT(4 2)')
38+
UNION ALL
39+
SELECT TO_GEOMETRY('POINT(2 5)')
40+
)
41+
SELECT ST_ASWKT(ST_ENVELOPE_AGG(g)) FROM data;
42+
43+
╭────────────────────────────────╮
44+
│ st_aswkt(st_envelope_agg(g)) │
45+
├────────────────────────────────┤
46+
POLYGON((1 1,4 1,4 5,1 5,1 1)) │
47+
╰────────────────────────────────╯
48+
```
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: ST_INTERSECTION_AGG
3+
---
4+
5+
对多个 GEOMETRY 值逐步执行 `ST_INTERSECTION`,并返回它们共同重叠的部分。
6+
7+
该函数仅支持 GEOMETRY 类型。
8+
9+
## 语法
10+
11+
```sql
12+
ST_INTERSECTION_AGG(<geometry>)
13+
```
14+
15+
## 参数
16+
17+
| 参数 | 说明 |
18+
|------|------|
19+
| `<geometry>` | GEOMETRY 类型的表达式。 |
20+
21+
## 返回类型
22+
23+
GEOMETRY。
24+
25+
:::note
26+
- 会忽略 NULL 输入行。
27+
- 如果所有输入行都是 NULL,则返回 NULL。
28+
- 如果输入 GEOMETRY 的 SRID 不一致,函数会报错。
29+
:::
30+
31+
## 示例
32+
33+
```sql
34+
WITH data AS (
35+
SELECT TO_GEOMETRY('POLYGON((0 0,4 0,4 4,0 4,0 0))') AS g
36+
UNION ALL
37+
SELECT TO_GEOMETRY('POLYGON((1 1,3 1,3 3,1 3,1 1))')
38+
)
39+
SELECT ST_ASWKT(ST_INTERSECTION_AGG(g)) FROM data;
40+
41+
╭──────────────────────────────────╮
42+
│ st_aswkt(st_intersection_agg(g)) │
43+
├──────────────────────────────────┤
44+
POLYGON((1 3,1 1,3 1,3 3,1 3)) │
45+
╰──────────────────────────────────╯
46+
```
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
---
2+
title: ST_UNION_AGG
3+
---
4+
5+
对多个 GEOMETRY 值逐步执行 `ST_UNION`,并返回合并后的 GEOMETRY 结果。
6+
7+
该函数仅支持 GEOMETRY 类型。
8+
9+
## 语法
10+
11+
```sql
12+
ST_UNION_AGG(<geometry>)
13+
```
14+
15+
## 参数
16+
17+
| 参数 | 说明 |
18+
|------|------|
19+
| `<geometry>` | GEOMETRY 类型的表达式。 |
20+
21+
## 返回类型
22+
23+
GEOMETRY。
24+
25+
:::note
26+
- 会忽略 NULL 输入行。
27+
- 如果所有输入行都是 NULL,则返回 NULL。
28+
- 如果输入 GEOMETRY 的 SRID 不一致,函数会报错。
29+
:::
30+
31+
## 示例
32+
33+
```sql
34+
WITH data AS (
35+
SELECT TO_GEOMETRY('POINT(0 0)') AS g
36+
UNION ALL
37+
SELECT TO_GEOMETRY('POINT(1 1)')
38+
)
39+
SELECT ST_ASWKT(ST_UNION_AGG(g)) FROM data;
40+
41+
╭───────────────────────────╮
42+
│ st_aswkt(st_union_agg(g)) │
43+
├───────────────────────────┤
44+
│ MULTIPOINT(0 0,1 1) │
45+
╰───────────────────────────╯
46+
```

docs/cn/sql-reference/20-sql-functions/07-aggregate-functions/index.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,15 @@ title: '聚合函数'
6161
| [GROUP_ARRAY_MOVING_AVG](aggregate-group-array-moving-avg.md) | 计算数组的移动平均值 | `GROUP_ARRAY_MOVING_AVG(3)(values)``[null, null, 3.0, 6.0, 9.0]` |
6262
| [GROUP_ARRAY_MOVING_SUM](aggregate-group-array-moving-sum.md) | 计算数组的移动总和 | `GROUP_ARRAY_MOVING_SUM(2)(values)``[null, 3, 7, 11, 15]` |
6363

64+
## 地理空间聚合
65+
66+
| 函数 | 描述 | 示例 |
67+
|----------|-------------|---------|
68+
| [ST_UNION_AGG](aggregate-st-union-agg.md) | 对分组内的 GEOMETRY 值做合并 | `ST_UNION_AGG(geom)``MULTIPOINT(...)` |
69+
| [ST_INTERSECTION_AGG](aggregate-st-intersection-agg.md) | 对分组内的 GEOMETRY 值做相交 | `ST_INTERSECTION_AGG(geom)``POLYGON(...)` |
70+
| [ST_ENVELOPE_AGG](aggregate-st-envelope-agg.md) | 返回分组内 GEOMETRY 值的最小外接矩形 | `ST_ENVELOPE_AGG(geom)``POLYGON(...)` |
71+
| [ST_COLLECT](aggregate-st-collect.md) | 将分组内的 GEOMETRY 值收集为一个 GEOMETRY 结果 | `ST_COLLECT(geom)``GEOMETRYCOLLECTION(...)` |
72+
6473
## 字符串聚合
6574

6675
| 函数 | 描述 | 示例 |

docs/cn/sql-reference/20-sql-functions/09-geospatial-functions/index.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ Databend 内置两套互补的地理空间能力:PostGIS 风格的几何(Geo
4949
| 函数 | 描述 | 说明 | 示例 |
5050
|----------|-------------|------|---------|
5151
| [ST_DIMENSION](st-dimension.md) | 返回拓扑维度 | | `ST_DIMENSION(ST_MAKEGEOMPOINT(-122.35, 37.55))``0` |
52+
| [ST_CENTROID](st-centroid.md) | 返回几何体的质心 | 仅 GEOMETRY | `ST_CENTROID(TO_GEOMETRY('LINESTRING(0 0, 2 0)'))``POINT(1 0)` |
53+
| [ST_ENVELOPE](st-envelope.md) | 返回最小外接矩形 | 仅 GEOMETRY | `ST_ENVELOPE(TO_GEOMETRY('LINESTRING(0 0, 2 3)'))``POLYGON((0 0,2 0,2 3,0 3,0 0))` |
5254
| [ST_SRID](st-srid.md) | 返回几何体的 SRID | | `ST_SRID(ST_MAKEGEOMPOINT(-122.35, 37.55))``4326` |
5355
| [ST_POINTN](st-pointn.md) | 返回 LineString 中的指定点 | | `ST_POINTN(ST_MAKELINE(...), 1)``POINT(-122.35 37.55)` |
5456
| [ST_STARTPOINT](st-startpoint.md) | 返回 LineString 的起点 | | `ST_STARTPOINT(ST_MAKELINE(...))``POINT(-122.35 37.55)` |
@@ -73,6 +75,11 @@ Databend 内置两套互补的地理空间能力:PostGIS 风格的几何(Geo
7375
| [ST_EQUALS](st-equals.md) | 测试两个几何体是否空间相等 | 仅 GEOMETRY | `ST_EQUALS(TO_GEOMETRY('POINT(1 1)'), TO_GEOMETRY('POINT(1 1)'))``TRUE` |
7476
| [ST_LENGTH](st-length.md) | 测量 LineString 的长度 | | `ST_LENGTH(ST_MAKELINE(...))``5.57` |
7577
| [ST_DISTANCE](st-distance.md) | 测量几何体之间的距离 | | `ST_DISTANCE(ST_MAKEGEOMPOINT(-122.35, 37.55), ST_MAKEGEOMPOINT(-122.40, 37.60))``5.57` |
78+
| [ST_DWITHIN](st-dwithin.md) | 测试两个几何体是否在指定距离内 | 仅 GEOMETRY | `ST_DWITHIN(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'), 1.5)``TRUE` |
79+
| [ST_UNION](st-union.md) | 返回两个几何体的合并结果 | 仅 GEOMETRY | `ST_UNION(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'))``MULTIPOINT(0 0,1 1)` |
80+
| [ST_INTERSECTION](st-intersection.md) | 返回两个几何体的重叠部分 | 仅 GEOMETRY | `ST_INTERSECTION(TO_GEOMETRY('LINESTRING(0 0, 1 1)'), TO_GEOMETRY('LINESTRING(0 0, 1 1)'))``LINESTRING(0 0,1 1)` |
81+
| [ST_DIFFERENCE](st-difference.md) | 返回第一个几何体中未被第二个覆盖的部分 | 仅 GEOMETRY | `ST_DIFFERENCE(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'))``POINT(0 0)` |
82+
| [ST_SYMDIFFERENCE](st-symdifference.md) | 返回两个几何体中不重叠的部分 | 仅 GEOMETRY | `ST_SYMDIFFERENCE(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'))``MULTIPOINT(0 0,1 1)` |
7683

7784
## 变换
7885

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
---
2+
title: ST_CENTROID
3+
---
4+
import FunctionDescription from '@site/src/components/FunctionDescription';
5+
6+
<FunctionDescription description="引入或更新于:v1.2.895"/>
7+
8+
返回 GEOMETRY 对象的质心。
9+
10+
该函数仅支持 GEOMETRY 类型。
11+
12+
## 语法
13+
14+
```sql
15+
ST_CENTROID(<geometry>)
16+
```
17+
18+
## 参数
19+
20+
| 参数 | 说明 |
21+
|------|------|
22+
| `<geometry>` | 必须是 GEOMETRY 类型的表达式。 |
23+
24+
## 返回类型
25+
26+
GEOMETRY。
27+
28+
## 示例
29+
30+
```sql
31+
SELECT ST_ASWKT(ST_CENTROID(TO_GEOMETRY('POINT(1 2)')));
32+
33+
╭──────────────────────────────────────────────────╮
34+
│ st_aswkt(st_centroid(to_geometry('POINT(1 2)'))) │
35+
├──────────────────────────────────────────────────┤
36+
POINT(1 2) │
37+
╰──────────────────────────────────────────────────╯
38+
```
39+
40+
```sql
41+
SELECT ST_ASWKT(ST_CENTROID(TO_GEOMETRY('LINESTRING(0 0, 2 0)')));
42+
43+
╭────────────────────────────────────────────────────────────╮
44+
│ st_aswkt(st_centroid(to_geometry('LINESTRING(0 0, 2 0)'))) │
45+
├────────────────────────────────────────────────────────────┤
46+
POINT(1 0) │
47+
╰────────────────────────────────────────────────────────────╯
48+
```
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
title: ST_DIFFERENCE
3+
---
4+
import FunctionDescription from '@site/src/components/FunctionDescription';
5+
6+
<FunctionDescription description="引入或更新于:v1.2.895"/>
7+
8+
返回第一个 GEOMETRY 对象中未被第二个 GEOMETRY 对象覆盖的部分。
9+
10+
该函数仅支持 GEOMETRY 类型。
11+
12+
## 语法
13+
14+
```sql
15+
ST_DIFFERENCE(<geometry1>, <geometry2>)
16+
```
17+
18+
## 参数
19+
20+
| 参数 | 说明 |
21+
|------|------|
22+
| `<geometry1>` | 必须是 GEOMETRY 类型的表达式。 |
23+
| `<geometry2>` | 必须是 GEOMETRY 类型的表达式。 |
24+
25+
:::note
26+
- 如果两个输入 GEOMETRY 对象的 SRID 不同,函数会报错。
27+
:::
28+
29+
## 返回类型
30+
31+
GEOMETRY。
32+
33+
## 示例
34+
35+
```sql
36+
SELECT ST_ASWKT(ST_DIFFERENCE(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)')));
37+
38+
╭───────────────────────────────────────────────────────────────────────────────╮
39+
│ st_aswkt(st_difference(to_geometry('POINT(0 0)'), to_geometry('POINT(1 1)'))) │
40+
├───────────────────────────────────────────────────────────────────────────────┤
41+
POINT(0 0) │
42+
╰───────────────────────────────────────────────────────────────────────────────╯
43+
```
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
title: ST_DWITHIN
3+
---
4+
import FunctionDescription from '@site/src/components/FunctionDescription';
5+
6+
<FunctionDescription description="引入或更新于:v1.2.895"/>
7+
8+
如果两个 GEOMETRY 对象之间的欧氏距离不超过指定距离,则返回 TRUE。
9+
10+
该函数仅支持 GEOMETRY 类型。
11+
12+
## 语法
13+
14+
```sql
15+
ST_DWITHIN(<geometry1>, <geometry2>, <distance>)
16+
```
17+
18+
## 参数
19+
20+
| 参数 | 说明 |
21+
|------|------|
22+
| `<geometry1>` | 必须是 GEOMETRY 类型的表达式。 |
23+
| `<geometry2>` | 必须是 GEOMETRY 类型的表达式。 |
24+
| `<distance>` | 最大欧氏距离,必须是可转换为 Float64 的数值。 |
25+
26+
:::note
27+
- 如果两个输入 GEOMETRY 对象的 SRID 不同,函数会报错。
28+
:::
29+
30+
## 返回类型
31+
32+
布尔值(Boolean)。
33+
34+
## 示例
35+
36+
```sql
37+
SELECT ST_DWITHIN(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('POINT(1 1)'), 1.5);
38+
39+
╭───────────────────────────────────────────────────────────────────────╮
40+
│ st_dwithin(to_geometry('POINT(0 0)'), to_geometry('POINT(1 1)'), 1.5) │
41+
├───────────────────────────────────────────────────────────────────────┤
42+
│ true │
43+
╰───────────────────────────────────────────────────────────────────────╯
44+
```
45+
46+
```sql
47+
SELECT ST_DWITHIN(TO_GEOMETRY('POINT(0 0)'), TO_GEOMETRY('LINESTRING(2 0, 2 2)'), 1.9);
48+
49+
╭─────────────────────────────────────────────────────────────────────────────────╮
50+
│ st_dwithin(to_geometry('POINT(0 0)'), to_geometry('LINESTRING(2 0, 2 2)'), 1.9) │
51+
├─────────────────────────────────────────────────────────────────────────────────┤
52+
│ false │
53+
╰─────────────────────────────────────────────────────────────────────────────────╯
54+
```

0 commit comments

Comments
 (0)