

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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="geospatial-overview"></a>

*空間資料*描述已定義空間 (空間參考系統) 中幾何圖形的位置和形狀。Amazon Redshift 支援資料類型為 `GEOMETRY` 和 `GEOGRAPHY` 的空間資料，其中包含空間資料及資料的空間參考系統識別碼 (SRID) (選擇性)。

空間資料包含能用來表示地理特徵的幾何資料。這類資料的例子包括天氣報告、地圖方向、含地理位置的推文、商店位置，以及飛機航線。空間資料在商業分析、報告和預測方面扮演重要角色。

您可以使用 Amazon Redshift SQL 函數查詢空間資料。空間資料包含物件的幾何值。

`GEOMETRY` 資料類型操作會在笛卡爾平面上運作。雖然空間參照系統識別碼 (SRID) 儲存在物件內，但此 SRID 只是座標系統的識別碼，在用來處理 `GEOMETRY` 物件的演算法中沒有任何作用。相反地，`GEOGRAPHY` 資料類型上的操作會將物件內部的座標視為球體上的球形座標。此球體由參考地理空間參考系統的 SRID 定義。依預設，`GEOGRAPHY` 資料類型是使用空間參考 (SRID) 4326 建立的，並且參考世界大地測量系統 (WGS) 84。如需 SRID 的相關資訊，請參閱 Wikipedia 中的[空間參考系統](https://en.wikipedia.org/wiki/Spatial_reference_system)。

您可以使用 ST\_Transform 函數來轉換來自各種空間參考系統的座標。坐標轉換完成後，只要輸入 `GEOMETRY` 使用地理 SRID 編碼，您也可以在兩者之間使用簡單的轉換。這種轉換只是複製坐標而無需進一步的轉換。例如：

```
SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(10 20)')::geography);
```

```
st_asewkt
------------------------
 SRID=4326;POINT(10 20)
```

為了更好地了解 `GEOMETRY` 和 `GEOGRAPHY` 資料類型之間的差異，可考慮使用世界大地測量系統 (WGS) 84 來計算柏林機場 (BER) 和舊金山機場 (SFO) 之間的距離。使用 `GEOGRAPHY` 資料類型時，結果會以公尺為單位。將 `GEOMETRY` 資料類型與 SRID 4326 搭配使用時，結果會以度為單位，無法轉換為公尺，因為一度的距離取決於地球幾何圖形上的位置。

對 `GEOGRAPHY` 資料類型的計算主要用於現實的圓形地球計算，如一個國家/地區精確而不失真的面積。但是其計算成本要高得多。因此，ST\_Transform 可以將您的座標轉換為適當的局部投影座標系統，並更快地對 `GEOMETRY` 資料類型進行計算。

使用空間資料，您可以執行查詢來執行以下作業：
+ 尋找兩點之間的距離。
+ 檢查是否一個區域 (多邊形) 包含其他區域。
+ 檢查一個線串 (linestring) 是否與另一個線串或多邊形交集。

您可以使用 `GEOMETRY` 資料類型來保存空間資料的值。Amazon Redshift 中的 `GEOMETRY` 值可以定義二維 (2D)、三維 (3DZ)、具量值二維 (3DM) 及四維 (4D) 幾何基本資料類型：
+ 二維 (2D) 幾何圖形由平面中的兩個直角座標 (x、y) 指定。
+ 三維 (3DZ) 幾何圖形由空間中的三個直角座標 (x、y、z) 指定。
+ 具量值二維 (3DM) 幾何圖形由三個坐標 (x、y、m) 指定，前兩個座標是平面中的直角坐標，第三個是測量值。
+ 四維 (4D) 幾何圖形由四個坐標 (x、y、z、m) 指定，前三個座標是空間中的直角坐標，第四個是測量值。

如需基本幾何資料類型的相關資訊，請參閱 Wikipedia 中的 [Well-known text representation of geometry (幾何圖形的熟知文字表示法)](https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry)。

您可以使用 `GEOGRAPHY` 資料類型來保存空間資料的值。Amazon Redshift 中的 `GEOGRAPHY` 值可以定義二維 (2D)、三維 (3DZ)、具量值二維 (3DM) 及四維 (4D) 幾何基本資料類型：
+ 二維 (2D) 幾何圖形由球體上的經度和緯度座標指定。
+ 三維 (3DZ) 幾何圖形由球體上的經度、緯度和高度座標指定。
+ 具量值二維 (3DM) 幾何圖形由三個坐標 (經度、緯度和量值) 指定，前兩個座標是球體上的角度坐標，第三個是測量值。
+ 四維 (4D) 幾何圖形由四個座標 (經度、緯度、高度、量值) 指定，其中前三個是經度、緯度和高度，第四個是測量值。

如需地理坐標系統的相關資訊，請參閱 Wikipedia 中的[地理坐標系統](https://en.wikipedia.org/wiki/Geographic_coordinate_system)和[球形坐標系統](https://en.wikipedia.org/wiki/Spherical_coordinate_system)。

`GEOMETRY` 和 `GEOGRAPHY` 資料類型具有下列子類型：
+ `POINT`
+ `LINESTRING`
+ `POLYGON`
+ `MULTIPOINT`
+ `MULTILINESTRING`
+ `MULTIPOLYGON`
+ `GEOMETRYCOLLECTION`

其中有支援下列幾何資料表示法的 Amazon Redshift SQL 函數：
+ GeoJSON
+ 已知文字 (WKT) 
+ 擴充的已知文字 (EWKT)
+ 已知二進位 (WKB) 表示法 
+ 擴充的已知二進位 (EWKB)

您可以在 `GEOMETRY` 和 `GEOGRAPHY` 資料類型之間進行轉換。

下列 SQL 將線串從 `GEOMETRY` 轉換為 `GEOGRAPHY`。

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geography);
```

```
 st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

下列 SQL 將線串從 `GEOGRAPHY` 轉換為 `GEOMETRY`。

```
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)')::geometry);
```

```
 st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

Amazon Redshift 提供許多 SQL 函數來查詢空間資料。除了 `ST_IsValid` 函數之外，接受 `GEOMETRY` 物件作為引數的空間函數會預期此 `GEOMETRY` 物件是有效的幾何圖形。如果 `GEOMETRY` 或 `GEOGRAPHY` 物件無效，則不會定義空間函數的行為。如需有效性的相關資訊，請參閱 [幾何有效性](spatial-terminology.md#spatial-terminology-validity)。

如需查詢空間資料 SQL 函數的詳細資訊，請參閱 [空間函數](geospatial-functions.md)。

如需載入空間資料的詳細資訊，請參閱 [載入 GEOMETRY 或 GEOGRAPHY 資料類型的欄](copy-usage_notes-spatial-data.md)。

**Topics**
+ [教學課程：將空間 SQL 函數與 Amazon Redshift 搭配使用](spatial-tutorial.md)
+ [將 Shapefile 載入 Amazon Redshift](spatial-copy-shapefile.md)
+ [Amazon Redshift 空間資料的術語](spatial-terminology.md)
+ [將空間資料與 Amazon Redshift 搭配使用時的考量事項](spatial-limitations.md)