

 从补丁 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/)。

# ST\$1DistanceSphere
<a name="ST_DistanceSphere-function"></a>

ST\$1DistanceSphere 返回位于球体上的两个点几何体之间的距离。

## 语法
<a name="ST_DistanceSphere-function-syntax"></a>

```
ST_DistanceSphere(geom1, geom2)
```

```
ST_DistanceSphere(geom1, geom2, radius)
```

## 参数
<a name="ST_DistanceSphere-function-arguments"></a>

 *geom1*   
位于球体上的数据类型 `GEOMETRY` 的点值（以度为单位）。该点的第一个坐标是经度值。该点的第二个坐标是纬度值。对于 3DZ、3DM 或 4D 几何体，仅使用前两个坐标。

 *geom2*   
位于球体上的数据类型 `GEOMETRY` 的点值（以度为单位）。该点的第一个坐标是经度值。该点的第二个坐标是纬度值。对于 3DZ、3DM 或 4D 几何体，仅使用前两个坐标。

 *radius*   
数据类型 `DOUBLE PRECISION` 的球体半径。如果未提供 *radius*，则球体默认为地球，并且半径是根据椭球体的世界大地测量系统 (WGS) 84 表示形式来计算的。

## 返回类型
<a name="ST_DistanceSphere-function-return"></a>

`DOUBLE PRECISION`，采用与半径相同的单位。如果未提供半径，则距离以米为单位。

如果 *geom1* 或 *geom2* 为 null 或为空，则返回 null。

如果未提供 *radius*，则结果是沿地球表面的米数。

如果 *radius* 是负数，则返回一个错误。

如果 *geom1* 和 *geom2* 不具有相同的空间参考系统标识符 (SRID) 值，则返回一个错误。

如果 *geom1* 或 *geom2* 不是点，则返回一个错误。

## 示例
<a name="ST_DistanceSphere-function-examples"></a>

以下示例 SQL 计算地球上两点之间的距离（以千米为单位）。

```
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
```

```
  round
-----------
 13
```

以下示例 SQL 计算位于德国的三个机场位置之间的距离（以公里为单位）：Berlin Tegel (TXL)、Munich International (MUC) 和 Frankfurt International (FRA)。

```
WITH airports_raw(code,lon,lat) AS (
(SELECT 'MUC', 11.786111, 48.353889) UNION
(SELECT 'FRA', 8.570556, 50.033333) UNION
(SELECT 'TXL', 13.287778, 52.559722)),
airports1(code,location) AS (SELECT code, ST_Point(lon, lat) FROM airports_raw),
airports2(code,location) AS (SELECT * from airports1)
SELECT (airports1.code || ' <-> ' || airports2.code) AS airports,
round(ST_DistanceSphere(airports1.location, airports2.location) / 1000, 0) AS distance_in_km
FROM airports1, airports2 WHERE airports1.code < airports2.code ORDER BY 1;
```

```
  airports   | distance_in_km 
-------------+----------------
 FRA <-> MUC |            299
 FRA <-> TXL |            432
 MUC <-> TXL |            480
```