

# Babelfish は地理空間データ型をサポート
<a name="babelfish-geospatial"></a>

バージョン 3.5.0 および 4.1.0 以降、Babelfish では次の 2 つの空間データ型がサポートされています。
+ **ジオメトリデータ型** – このデータ型は、平面データまたはユークリッド (フラットアース) データを保存することを目的としています。
+ **地理データ型** – このデータ型は、GPS の緯度や経度の座標など、楕円データまたはラウンドアースデータを保存することを目的としています。

これらのデータ型により、空間データの保存と操作が可能になりますが、いくつかの制限があります。

## Babelfish の地理空間データ型について
<a name="babelfish-geospatial-overview"></a>
+ 地理空間データ型は、ビュー、プロシージャ、テーブルなどのさまざまなデータベースオブジェクトでサポートされています。
+ ポイントデータ型をサポートし、位置データを緯度、経度、有効な空間参照系識別子 (SRID) で定義されたポイントとして保存します。ポイントには Z (標高)、M (測定) 値が含まれる場合があり、空になることもあります。
+ 一連のポイントとそれらを接続している線分、および有効な空間参照系識別子 (SRID) によって定義されるラインストリングデータ型 (バージョン 5.4.0 から) をサポートします。ラインストリングには Z (標高)、M (測定) 値を持つポイントが含まれる場合があり、空になることもあります。
+ ポリゴンデータ型をサポートします (バージョン 5.5.0 および 6.0.0 以降)。ポリゴンとは、外部境界リングと 0 個以上の内部リングを定義する一連のポイントとして保存される 2 次元表面のことです。
+ JDBC、ODBC、DOTNET、PYTHON などのドライバーを介して Babelfish に接続するアプリケーションは、この地理空間機能を利用できます。

### Babelfish でサポートされているジオメトリデータ型関数
<a name="babelfish-geospatial-overview-geometry"></a>
+ **STGeomFromText ({{geometry\_tagged\_text}}, SRID)** – Well-Known Text (WKT) 表現を使用してジオメトリインスタンスを作成します。
+ **STPointFromText ({{point\_tagged\_text}}, SRID)** – WKT 表現を使用してポイントインスタンスを作成します。
+ **Point ( X、Y、SRID)** – x および y 座標の浮動小数点値を使用してポイントインスタンスを作成します。
+ **<geometry\_instance>.STAsText ( )** – ジオメトリインスタンスから WKT 表現を抽出します。
+ **<geometry\_instance>.STAsBinary ( )** – ジオメトリインスタンスから WKB 表現を抽出します。
+ **<geometry\_instance>.STArea ( )** – ジオメトリインスタンスの合計表面積を計算します。
+ **<geometry\_instance>.STSrid ( )** – ジオメトリインスタンスの空間参照系識別子 (SRID) を抽出します。
+ **<geometry\_instance>.STDimension ( )** – ジオメトリインスタンスの空間ディメンションを取得します。
+ **<geometry\_instance>.STIsEmpty ( )** – ジオメトリインスタンスが空かどうかを確認します。
+ **<geometry\_instance>.STIsClosed ( )** – ジオメトリインスタンスが閉じられているかどうかを確認します。
+ **<geometry\_instance>.STIsValid ( )** – ジオメトリインスタンスが有効かどうかを確認します。
+ **<geometry\_instance>.STDistance (other\_geometry)** – 2 つのジオメトリインスタンス間の距離を計算します。
+ **<geometry\_instance>.STEquals (other\_geometry)** – ジオメトリインスタンスが別のジオメトリインスタンスと同じポイントセットを表しているかどうかを確認します。
+ **<geometry\_instance>.STContains (other\_geometry)** – ジオメトリインスタンスに other\_geometry インスタンスが含まれているかどうかを確認します。
+ **<geometry\_instance>.STDisjoint (other\_geometry)** – 2 つのジオメトリインスタンスに共通するポイントがないかどうかを確認します。
+ **<geometry\_instance>.STIntersects (other\_geometry)** – 2 つのジオメトリインスタンスが空間的に交差するかどうかを確認します。
+ **<geometry\_instance>.STX** – ジオメトリインスタンスの X 座標 (経度) を抽出します。
+ **<geometry\_instance>.STY** – ジオメトリインスタンスの Y 座標 (緯度) を抽出します。

バージョン 4.7.0 および 5.3.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **<geometry\_instance>.M** – ジオメトリインスタンスの M 座標を抽出します。
+ **<geometry\_instance>.Z** – ジオメトリインスタンスの Z 座標を抽出します。
+ **<geometry\_instance>.HasM** – ジオメトリインスタンスに少なくとも 1 つの M 値があるかどうかを確認します。
+ **<geometry\_instance>.HasZ** – ジオメトリインスタンスに少なくとも 1 つの Z 値があるかどうかを確認します。

バージョン 5.4.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)** – WKT 表現を使用してラインストリングインスタンスを作成します。

バージョン 5.5.0 および 6.0.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)** – WKT 表現を使用してポリゴンインスタンスを作成します。

### Babelfish でサポートされている地理データ型関数
<a name="babelfish-geospatial-overview-geography"></a>
+ **STGeomFromText ({{geography\_tagged\_text}}, SRID)** – WKT 表現を使用して地理インスタンスを作成します。
+ **STPointFromText ({{point\_tagged\_text}}, SRID)** – WKT 表現を使用してポイントインスタンスを作成します。
+ **Point (Lat, Long, SRID)** – 緯度と経度の浮動小数点値を使用してポイントインスタンスを作成します。
+ **<geography\_instance>.STAsText ( )** – 地理インスタンスから WKT 表現を抽出します。
+ **<geography\_instance>.STAsBinary ( )** – 地理インスタンスから WKB 表現を抽出します。
+ **<geography\_instance>.STArea ( )** – 地理インスタンスの合計表面積を計算します。
+ **<geography\_instance>.STSrid ( )** – 地理インスタンスの空間参照系識別子 (SRID) を抽出します。
+ **<geography\_instance>.STDimension ( )** – 地理インスタンスの空間ディメンションを取得します。
+ **<geography\_instance>.STIsEmpty ( )** – 地理インスタンスが空かどうかを確認します。
+ **<geography\_instance>.STIsClosed ( )** – 地理インスタンスが閉じられているかどうかを確認します。
+ **<geography\_instance>.STIsValid( )** – 地理インスタンスが有効かどうかを確認します。
+ **<geography\_instance>.STDistance (other\_geography)** – 2 つの地理インスタンス間の距離を計算します。
+ **<geography\_instance>.STEquals (other\_geography)** – 地理インスタンスが別の地理インスタンスと同じポイントセットを表しているかどうかをチェックします。
+ **<geography\_instance>.STContains (other\_geography)** – 地理インスタンスに other\_geography インスタンスが含まれているかどうかを確認します。
+ **<geography\_instance>.STDisjoint (other\_geography)** – 2 つの地理インスタンスに共通するポイントがないかどうかを確認します。
+ **<geography\_instance>.STIntersects (other\_geography)** – 2 つの地理インスタンスが空間的に交差しているかどうかを確認します。
+ **<geography\_instance>.Lat** – 地理インスタンスの緯度値を抽出します。
+ **<geography\_instance>.Long** – 地理インスタンスの経度値を抽出します。

バージョン 4.7.0 および 5.3.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **<geography\_instance>.M** – 地理インスタンスの M 座標を抽出します。
+ **<geography\_instance>.Z** – 地理インスタンスの Z 座標を抽出します。
+ **<geography\_instance>.HasM** – 地理インスタンスに少なくとも 1 つの M 値があるかどうかを確認します。
+ **<geography\_instance>.HasZ** – 地理インスタンスに少なくとも 1 つの Z 値があるかどうかを確認します。

バージョン 5.4.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **STLineFromText ({{linestring\_tagged\_text}}, SRID)** – WKT 表現を使用してラインストリングインスタンスを作成します。

バージョン 5.5.0 および 6.0.0 以降、Babelfish では次の空間データ関数がサポートされています。
+ **STPolyFromText ({{polygon\_tagged\_text}}, SRID)** – WKT 表現を使用してポリゴンインスタンスを作成します。

## Babelfish での地理空間データ型の制限
<a name="babelfish-geospatial-limitations"></a>
+ ポイント、ラインストリング、ポリゴンインスタンス以外のジオメトリおよび地理タイプは現在サポートされていません。
  + CircularString
  + CompoundCurve
  + CurvePolygon
  + MultiPoint
  + MultiLineString
  + MultiPolygon
  + GeometryCollection
+ 現在、空間インデックス作成は地理空間データ型ではサポートされていません。
+ 現在、これらのデータ型では、記載されている関数のみがサポートされています。詳細については、「[Babelfish でサポートされているジオメトリデータ型関数](#babelfish-geospatial-overview-geometry)」および「[Babelfish でサポートされている地理データ型関数](#babelfish-geospatial-overview-geography)」を参照してください。
+ 地理データの STDistance 関数の出力は、T-SQL と比較して精度に若干のばらつきが含まれる場合があります。これは、基盤となる PostGIS 実装に起因するものです。詳細については、「[ST\_Distance](https://postgis.net/docs/ST_Distance.html)」を参照してください。
+ ジオメトリデータと地理データの両方に対する STIsValid 関数の出力は、T-SQL と比較して多少の偏差がある可能性があります。このため、STDistance、STContains、STInstersects、STDisjoint、STDimension、STArea、STEquals などの関数も、場合によっては T-SQL から逸脱することがあります (エラーをスローする代わりに出力を返します)。これは、基盤となる PostGIS 実装に起因するものです。詳細については、「[ST\_IsValid](https://postgis.net/docs/ST_IsValid.html)」を参照してください。
+ 最適なパフォーマンスを得るには、Babelfish で追加の抽象化レイヤーを作成せずに、組み込みの地理空間データ型を使用します。
+ Babelfish では、地理空間関数名がキーワードとして使用され、意図した方法で使用された場合にのみ空間オペレーションを実行します。