st_setpoint 函数

适用于:已勾选“是”的 Databricks Runtime 17.1 及更高版本

Important

此功能目前以公共预览版提供。

设置输入线串 GEOGRAPHYGEOMETRY 的第 n 个点。

Syntax

st_setpoint ( geo1Expr, indexExpr, geo2Expr )

Arguments

  • geo1Expr:一个GEOGRAPHY或者GEOMETRY值,用以表示线字符串。
  • indexExpr:一个 INTEGER 值,该值指示应设置新点的位置,该位置在行字符串中以1为起点。
  • geo2Expr:表示GEOGRAPHYGEOMETRY点的值。

Returns

如果GEOGRAPHYgeo1Expr都是geo2Expr类型,则返回GEOGRAPHY类型的值;如果GEOMETRYgeo1Expr都是geo2Expr类型,则返回GEOMETRY类型的值。 如果 indexExpr 为正值,则返回 GEOGRAPHYGEOMETRY 值为新的线字符串,其 indexExpr第一个点(从左计数)设置为 geo2Expr。 如果 indexExpr 为负数,则从右侧测量从 1 开始的添加点的线串位置。

  • 如果任何输入为NULL,该函数将返回NULL
  • 输出行字符串的 SRID 值等于输入 GEOGRAPHYGEOMETRY 值的通用 SRID 值。
  • 输出 GEOGRAPHYGEOMETRY 线字符串的维度与该 geo1Expr维度相同。 如果geo2Expr中包含了一些坐标,而这些坐标的维度在geo1Expr中不存在,那么对应的这些坐标将被设置为0。

Error conditions

  • 如果 geo1Expr 的类型为 GEOGRAPHY,且 geo2Expr 的类型为 GEOMETRY,或者反过来,那么函数将返回 DATATYPE_MISMATCH
  • 如果 SRID 值 geo1Expr 不同 geo2Expr ,函数将返回 ST_DIFFERENT_SRID_VALUES
  • 在以下任一情况下,该函数将返回 ST_INVALID_ARGUMENT
    • geo1Expr 不是线字符串,也不是空线字符串。
    • geo2Expr 的值不是一个点。
    • 值为geo2Expr的元素是一个空点。
  • 如果 indexExpr 的绝对值为 0 或大于线串中的点数量,则函数返回 ST_INVALID_INDEX_VALUE

Examples

-- We set the first point of the linestring counting from the left.
> SELECT st_astext(st_setpoint(st_geomfromtext('LINESTRING(1 2,3 4)'), 1, st_geomfromtext('POINT(7 8)')))
  LINESTRING(7 8,3 4)

-- We set the first point of the linestring counting from the right.
-- The point is missing a Z coordinate. This is set to 0 when we update the linestring.
> SELECT st_asewkt(st_setpoint(st_geogfromtext('LINESTRING ZM (1 2 3 4,5 6 7 8)'), -1, st_geogfromtext('POINT M (0 9 99)')))
  SRID=4326;LINESTRING ZM (1 2 3 4,0 9 0 99)