

# Babelfish 支持地理空间数据类型
<a name="babelfish-geospatial"></a>

从 3.5.0 和 4.1.0 版本开始，Babelfish 包括对以下两种空间数据类型的支持：
+ **几何数据类型** – 这种数据类型用于存储平面或欧几里得（扁平地球）数据。
+ **地理数据类型** – 这种数据类型用于存储椭圆或圆地球数据，例如 GPS 纬度和经度坐标。

这些数据类型允许存储和操作空间数据，但有限制。

## 了解 Babelfish 中的地理空间数据类型
<a name="babelfish-geospatial-overview"></a>
+ 各种数据库对象（例如视图、过程和表）都支持地理空间数据类型。
+ 支持点数据类型，以便将位置数据存储为由纬度、经度和有效的空间参考系统标识符（SRID）定义的点。一个点可能包含 Z（海拔）、M（测量）值，并且可以为空。
+ 支持由一系列点和连接它们的线段以及有效的空间参考系统标识符（SRID）定义的线串数据类型（自版本 5.4.0 起）。线串可能包含具有 Z（海拔）、M（测量）值并且可以为空的点。
+ 通过 JDBC、ODBC、DOTNET 和 PYTHON 等驱动程序连接到 Babelfish 的应用程序可以利用此地理空间功能。

### Babelfish 中支持的几何数据类型函数
<a name="babelfish-geospatial-overview-geometry"></a>
+ **STGeomFromText (*geometry\$1tagged\$1text*, SRID)** – 使用熟知文本（WKT）表示法创建几何实例。
+ **STPointFromText (*point\$1tagged\$1text*, SRID)** – 使用 WKT 表示法创建点实例。
+ **Point (X, Y, SRID)** – 使用 x 和 y 坐标的浮点值创建点实例。
+ **<geometry\$1instance>.STAsText ( )** – 从几何实例中提取 WKT 表示。
+ **<geometry\$1instance>.STAsBinary ( )**：从几何实例中提取 WKB 表示。
+ **<geometry\$1instance>.STArea ( )**：计算几何实例的总表面积。
+ **<geometry\$1instance>.STSrid ( )**：提取几何实例的空间参考标识符（SRID）。
+ **<geometry\$1instance>.STDimension ( )**：检索几何实例的空间维度。
+ **<geometry\$1instance>.STIsEmpty ( )**：检查几何实例是否为空。
+ **<geometry\$1instance>.STIsClosed ( )**：检查几何实例是否已关闭。
+ **<geometry\$1instance>.STIsValid ( )**：检查几何实例是否有效。
+ **<geometry\$1instance>.STDistance (other\$1geometry)** – 计算两个几何实例之间的距离。
+ **<geometry\$1instance>.STEquals (other\$1geometry)**：检查几何实例表示的点集是否与其它几何实例相同。
+ **<geometry\$1instance>.STContains (other\$1geometry)**：检查几何实例是否包含 other\$1geometry 实例。
+ **<geometry\$1instance>.STDisjoint (other\$1geometry)**：检查两个几何实例是否没有共同的点。
+ **<geometry\$1instance>.STIntersects (other\$1geometry)**：检查两个几何实例是否在空间上相交。
+ **<geometry\$1instance>.STX** – 提取几何实例的 X 坐标（经度）。
+ **<geometry\$1instance>.STY** – 提取几何实例的 Y 坐标（纬度）。

从版本 4.7.0 和 5.3.0 开始，Babelfish 包括对以下空间数据函数的支持：
+ **<geometry\$1instance>.M**：提取几何实例的 M 坐标。
+ **<geometry\$1instance>.Z**：提取几何实例的 Z 坐标。
+ **<geometry\$1instance>.HasM**：检查几何实例是否至少有一个 M 值。
+ **<geometry\$1instance>.HasZ**：检查几何实例是否至少有一个 Z 值。

从版本 5.4.0 开始，Babelfish 包括对以下空间数据函数的支持：
+ **STLineFromText (*linestring\$1tagged\$1text*, SRID )**：使用 WKT 表示创建线串实例。

### Babelfish 支持的地理数据类型函数
<a name="babelfish-geospatial-overview-geography"></a>
+ **STGeomFromText (*geography\$1tagged\$1text*, SRID)** – 使用 WKT 表示法创建地理实例。
+ **STPointFromText (*point\$1tagged\$1text*, SRID)** – 使用 WKT 表示法创建点实例。
+ **Point (Lat, Long, SRID)** – 使用纬度和经度的浮点值创建点实例。
+ **<geography\$1instance>.STAsText ( )** – 从地理实例中提取 WKT 表示。
+ **<geography\$1instance>.STAsBinary ( )**：从地理实例中提取 WKB 表示。
+ **<geography\$1instance>.STArea ( )**：计算地理实例的总表面积。
+ **<geography\$1instance>.STSrid ( )**：提取地理实例的空间参考标识符（SRID）。
+ **<geography\$1instance>.STDimension ( )**：检索地理实例的空间维度。
+ **<geography\$1instance>.STIsEmpty ( )**：检查地理实例是否为空。
+ **<geography\$1instance>.STIsClosed ( )**：检查地理实例是否已关闭。
+ **<geography\$1instance>.STIsValid( )**：检查地理实例是否有效。
+ **<geography\$1instance>.STDistance (other\$1geography)** – 计算两个地理实例之间的距离。
+ **<geography\$1instance>.STEquals (other\$1geography)**：检查地理实例表示的点集是否与其它地理实例相同。
+ **<geography\$1instance>.STContains (other\$1geography)**：检查地理实例是否包含 other\$1geography 实例。
+ **<geography\$1instance>.STDisjoint (other\$1geography)**：检查两个地理实例是否没有共同的点。
+ **<geography\$1instance>.STIntersects (other\$1geography)**：检查两个地理实例是否在空间上相交。
+ **<geography\$1instance>.Lat** – 提取地理实例的纬度值。
+ **<geography\$1instance>.Long** – 提取地理实例的经度值。

从版本 4.7.0 和 5.3.0 开始，Babelfish 包括对以下空间数据函数的支持：
+ **<geography\$1instance>.M**：提取地理实例的 M 坐标。
+ **<geography\$1instance>.Z**：提取地理实例的 Z 坐标。
+ **<geography\$1instance>.HasM**：检查地理实例是否至少有一个 M 值。
+ **<geography\$1instance>.HasZ**：检查地理实例是否至少有一个 Z 值。

从版本 5.4.0 开始，Babelfish 包括对以下空间数据函数的支持：
+ **STLineFromText (*linestring\$1tagged\$1text*, SRID )**：使用 WKT 表示创建线串实例。

## Babelfish 中对地理空间数据类型的限制
<a name="babelfish-geospatial-limitations"></a>
+ 目前不支持除点和线串实例之外的几何和地理类型：
  + CircularString
  + CompoundCurve
  + Polygon
  + CurvePolygon
  + MultiPoint
  + MultiLineString
  + MultiPolygon
  + GeometryCollection
+ 目前，地理空间数据类型不支持空间索引。
+ 目前，这些数据类型仅支持这些列出的函数。有关更多信息，请参阅 [Babelfish 中支持的几何数据类型函数](#babelfish-geospatial-overview-geometry)和 [Babelfish 支持的地理数据类型函数](#babelfish-geospatial-overview-geography)。
+ 与 T-SQL 相比，地理数据的 STDistance 函数输出可能存在细微的精度变化。这是由于底层的 PostGIS 实现。有关更多信息，请参阅 [ST\$1Distance](https://postgis.net/docs/ST_Distance.html)。
+ 与 T-SQL 相比，几何和地理数据的 STIsValid 函数输出可能存在一些偏差。因此，在某些情况下，函数（STDistance、STContains、STInstersects、STDisjoint、STDimension、STArea、STEquals）也可能与 T-SQL 有偏差（返回输出而不是引发错误）。这是由于底层的 PostGIS 实现。有关更多信息，请参阅 [ST\$1IsValid](https://postgis.net/docs/ST_IsValid.html)。
+ 为了获得最佳性能，可使用内置的地理空间数据类型，而无需在 Babelfish 中创建额外的抽象层。
+ 在 Babelfish 中，地理空间函数名称用作关键字，只有在按预期方式使用时才会执行空间运算。