

 Amazon Redshift は、パッチ 198 以降、新しい 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 は、球面の 2 つのポイントのジオメトリ間の距離を返します。

## 構文
<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` の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。

 *geom2*   
球面のデータ型 `GEOMETRY` の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。

 *radius*   
データ型 `DOUBLE PRECISION` の球の半径。*radius* が指定されていない場合、球体はデフォルトで地球に設定され、半径は楕円体の WGS (World Geodetic System) 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 の例では、地球上の 2 点間の距離をキロメートル単位で計算します。

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

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

次の SQL の例では、ドイツのベルリンテーゲル空港 (TXL)、ミュンヘン空港 (MUC)、フランクフルト空港 (FRA) の 3 つのポイントの場所の間の距離をキロメートルで計算します。

```
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
```