適用対象:
Databricks SQL
Databricks Runtime 17.1 以降" とマークされているチェック
Important
この機能は パブリック プレビュー段階です。
注
この機能は、Databricks SQL クラシック ウェアハウスでは使用できません。 Databricks SQL ウェアハウスの詳細については、 SQL ウェアハウスの種類に関するページを参照してください。
入力ライン文字列 GEOGRAPHY または GEOMETRY 値の n 番目の位置に新しいポイントを追加します。
Syntax
st_addpoint ( geo1Expr, geo2Expr[, indexExpr] )
Arguments
-
geo1Expr: ラインストリングを表すGEOGRAPHYまたはGEOMETRY値。 -
geo2Expr: ポイントを表すGEOGRAPHY値またはGEOMETRY値。 -
indexExpr: オプションのINTEGER値。新しいポイントを追加する必要がある行文字列内の 1 から始まる位置を示します。 既定値は -1 です。
Returns
GEOGRAPHYとgeo1Exprの両方が型geo2Exprの場合はGEOGRAPHY型の値。GEOMETRYとgeo1Exprの両方がgeo2Expr型の場合はGEOMETRY型の値。
indexExprが正の場合、返されるGEOGRAPHYまたはGEOMETRY値は、indexExpr番目のポイント (左からカウント) がgeo2Exprに設定された新しいライン文字列です。
indexExprが負の値の場合、ポイントが追加されるラインストリングの 1 から始まる位置が右から測定されます。
- いずれかの入力が
NULLされている場合、関数はNULLを返します。 - 出力ラインストリングの SRID 値は、入力
GEOGRAPHYまたはGEOMETRY値の共通 SRID 値と等しくなります。 - 出力
GEOGRAPHYまたはGEOMETRYライン文字列の次元は、geo1Exprと同じです。 ディメンションgeo2Expr存在しない座標がgeo1Exprに含まれている場合、対応する座標は 0 に設定されます。
エラー条件
-
geo1ExprがGEOGRAPHY型で、geo2ExprがGEOMETRY型の場合、またはその逆の場合、関数はDATATYPE_MISMATCHを返します。 -
geo1Exprとgeo2Exprの SRID 値が異なる場合、関数はST_DIFFERENT_SRID_VALUESを返します。 - この関数は次のいずれかの場合にST_INVALID_ARGUMENT.INVALID_TYPEを返します。
-
geo1Exprの値は行文字列ではありません。 -
geo2Exprの値はポイントではありません。
-
- この関数はST_INVALID_ARGUMENT.EMPTY_LINESTRINGを返します、
geo1Exprの値が空のラインストリングの場合に。 - 値が空のポイントの場合、この関数は
geo2Exprを返します。 -
indexExprの値の絶対値が 0 または行文字列内のポイント数に 1 を加算した値より大きい場合、関数はST_INVALID_ARGUMENTを返します。INVALID_INDEX_VALUE。
Examples
-- We do not specify a position; the point is appended at the end (right) of the linestring.
> SELECT st_asewkt(st_addpoint(st_geomfromtext('LINESTRING(1 2,3 4)', 4326), st_geomfromtext('POINT(7 8)', 4326)));
SRID=4326;LINESTRING(1 2,3 4,7 8)
-- A positive index indicates the position. We add the point at that position in the linestring.
> SELECT st_astext(st_addpoint(st_geomfromtext('LINESTRING(1 2,3 4)'), st_geomfromtext('POINT(7 8)'), 3));
LINESTRING(1 2,3 4,7 8)
-- The position is specified as a negative index. The point is added at that position counting from the right.
-- The point is missing a Z coordinate. This is set to 0 when the point is added in the linestring.
> SELECT st_asewkt(st_addpoint(st_geogfromtext('LINESTRING ZM (1 2 3 4,5 6 7 8)'), st_geogfromtext('POINT M (0 9 99)'), -1));
SRID=4326;LINESTRING ZM (1 2 3 4,5 6 7 8,0 9 0 99)