

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# Amazon Redshift 空间数据的术语
<a name="spatial-terminology"></a>

以下术语用于描述某些 Amazon Redshift 空间函数。

## 边界框
<a name="spatial-terminology-bounding-box"></a>

几何体或地理的边界框被定义为几何体或地理中所有点坐标范围的交叉乘积（跨维度）。对于二维几何体，边界框是一个矩形，完全包含几何体中的所有点。例如，多边形 `POLYGON((0 0,1 0,0 2,0 0))` 的边界框是由点 (0, 0) 和 (1, 2) 定义其左下角和右上角的矩形。Amazon Redshift 在几何体内预先计算并存储边界框，以加快几何谓词和空间连接的速度。例如，如果两个几何体的边界框不相交，则这两个几何体不能相交，并且它们不能位于使用 ST\$1Intersects 谓语的空间连接的结果集中。

您可以使用空间函数添加 ([AddBBox](AddBBox-function.md))、删除 ([DropBBox](DropBBox-function.md)），并确定对边界框的支持 ([SupportsBBox](SupportsBBox-function.md))。Amazon Redshift 支持所有几何体子类型的边界框的预计算。

以下示例显示了如何更新表中的现有几何体以使用边界框存储它们。如果您的集群处于集群版本 1.0.26809 或更高版本，则预设情况下会使用预先计算的边界框创建所有新几何体。

```
UPDATE my_table SET geom = AddBBox(geom) WHERE SupportsBBox(geom) = false;
```

更新现有几何体后，建议您对更新后的表运行 VACUUM 命令。有关更多信息，请参阅 [VACUUM](r_VACUUM_command.md)。

要设置会话期间是否使用边界框对几何体进行编码，请参阅[default\$1geometry\$1encoding](r_default_geometry_encoding.md)。

## 几何有效性
<a name="spatial-terminology-validity"></a>

Amazon Redshift 使用的几何算法假定输入几何体是有效的几何体。如果算法的输入无效，则结果是未定义的。以下部分介绍 Amazon Redshift 为每个几何体子类型使用的几何有效性定义。

Point  
如果满足以下任意条件，则认为点为有效：  
+ 该点是空点。
+ 所有点坐标都是有限的浮点数。
点可以是空点。

线串  
 如果满足以下任意条件，则线串视为有效：  
+ 线串为空；也就是说，它不包含点。
+ 非空线串中的所有点都具有包含有限浮点数的坐标。
+ 线串如果不为空，则必须是一维的；也就是说，它不能退化为点。
线串不能包含空点。  
线串可以具有重复的连续点。  
线串可以具有自交叉点。

面  
如果满足以下任意条件，则面被视为有效：  
+ 面为空；也就是说，它不包含环。
+ 如果面不为空，则在满足以下任意条件时有效：
  + 面的所有环都有效。如果满足以下所有条件，则环被视为有效：
    + 环的所有点都具有包含有限浮点数的坐标。
    + 环闭合；也就是说，它的第一个点和最后一个点重合。
    + 环没有任何自交叉点。
    + 环是二维的。
  + 多边形的环必须具有一致的方向。也就是说，如果您遍历任何环，则面的内部位于您的右侧或左侧。
  + 所有内部环必须位于面的外部环内。
  + 所有内环必须具有相同的方向，并且此方向必须与外环方向相反。
  + 内部环不能嵌套；也就是说，内部环不能位于另一个内部环内。
  + 内部环和外部环只能在有限数量的点上相交。
  + 必须简单地连接面的内部。
面不能包含空点。

多点  
如果满足以下任意条件，则多点被视为有效：  
+ 多点为空；也就是说，它不包含点。
+ 多点不为空，根据点有效性定义，所有点均有效。
多点可包含一个或多个空点。  
多点可以具有重复的点。

Multilinestring  
如果满足以下任意条件，则多线串被视为有效：  
+ 多线串为空；也就是说，它不包含线串。
+ 根据线串有效性定义，非空多线串中的所有线串都有效。
只包含空线串的非空多线串被认为是有效的。  
多线串中的空线串不会影响其有效性。  
多线串可以具有包含重复连续点的线串。  
多线串可以具有自交叉点。  
多线串不能包含空点。

多面  
如果满足以下任意条件，则多面被视为有效：  
+ 多面不包含任何面（它为空）。
+ 多面不是空的，且以下所有条件均成立：
  + 多面中的所有面都有效。
  + 多面中任何两个面都没有在无限数量的点上相交。特别是，这意味着任何两个面的内部都不能相交，并且它们只能接触到有限数量的点。
多面中的空面不会使多面失效。  
多面不能包含空点。

几何体集合  
如果满足以下任意条件，则几何体集合被视为有效：  
+ 几何体集合为空；也就是说，它不包含任何几何体。
+ 非空几何体集合中的所有几何体都有效。
尽管采用递归方式，该定义仍然适用于嵌套几何体集合。  
几何体集合可以包含空点和带有空点的多点。

## 几何简单性
<a name="spatial-terminology-simplicity"></a>

Amazon Redshift 使用的几何算法假定输入几何体是有效的几何体。如果算法的输入无效，则简单性检查是未定义的。以下部分介绍 Amazon Redshift 为每个几何体子类型使用的几何有效性定义。

Point  
如果满足以下任意条件，则有效点被视为简单：  
+ 一个有效的点始终被认为是简单的。
+ 一个空点被认为是简单的。

线串  
如果满足以下任意条件，则有效线串被视为简单：  
+ 线串为空。
+ 线串不为空，且满足以下所有条件：
  + 它没有重复的连续点。
  + 它没有自交叉点，除了可能的第一点和最后一点之外，它可以重合。换句话说，除边界点之外，线串不能有自交点。

面  
如果有效的面不包含任何重复的连续点，则视为简单面。

多点  
如果满足以下任意条件，则有效多点被视为简单：  
+ 多点为空；也就是说，它不包含点。
+ 多点中的任意两个非空点均不重合。

Multilinestring  
如果满足以下任意条件，则有效多线串被视为简单：  
+ 多线串为空。
+ 多线串不为空，且满足以下所有条件：
  + 它的所有线串都是简单的。
  + 多线串的任何两个线串都不相交，除非在作为两个线串边界点的点处。
仅由空线串组成的非空多线串被视为空。  
多线串中的空线串不会影响其简单性。  
多线串中的闭合线串不能与多线串中的任何其他线串相交。  
多线串不能具有包含重复连续点的线串。

多面  
如果有效的多面不包含任何重复的连续点，则该多面被认为是简单的。

几何体集合  
如果满足以下任意条件，则将有效的几何体集合视为简单：  
+ 几何体集合为空；也就是说，它不包含任何几何体。
+ 非空几何体集合中的所有几何体都是简单的。
尽管采用递归方式，该定义仍然适用于嵌套几何体集合。

## H3
<a name="spatial-terminology-h3"></a>

H3 是一种分层地理空间索引网格系统，它提供了一种将空间坐标索引到平方米分辨率的方法。索引数据可以跨不同的数据集进行联接，并以不同的精度进行聚合。H3 支持一系列基于网格的算法和优化，包括最近邻、最短路径、梯度平滑等。H3 索引指的是可以是六边形或五边形的单元格。根据分辨率，空间按层次细分。H3 支持 16 种分辨率，从 0 到 15（含）。`0` 表示最粗糙，`15` 表示最精细。

Amazon Redshift 提供以下 H3 空间函数：
+ [H3\$1Boundary](H3_Boundary-function.md)
+ [H3\$1Center](H3_Center-function.md)
+ [H3\$1FromLongLat](H3_FromLongLat-function.md)
+ [H3\$1FromPoint](H3_FromPoint-function.md)
+ [H3\$1IsValid](H3_IsValid-function.md)
+ [H3\$1Polyfill](H3_Polyfill-function.md)
+ [H3\$1Resolution](H3_Resolution-function.md)
+ [H3\$1ToChildren](H3_ToChildren-function.md)
+ [H3\$1ToParent](H3_ToParent-function.md)