这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

地理空间函数

地理空间函数处理复杂的二维空间对象,并根据开放地理空间联盟 (OGC) 标准将它们存储在数据库中。

函数命名约定

地理空间函数使用以下命名约定:

  • 大多数 ST_function‑name 函数符合最新 OGC 标准 OGC SFA-SQL 版本 1.2.1(参考编号为 OGC 06-104r4,日期:2010 年 8 月 4 日)。当前,一些 ST_function‑name 函数可能不支持所有数据类型。每个函数页包含了关于支持的数据类型的详细信息。

  • STV_function‑name 函数专门用于 Vertica 并且不符合 OGC 标准。每个函数页详细说明了其功能。

验证空间对象有效性

许多空间函数不会验证其参数。如果将无效的空间对象传递给 ST_ 或 STV_ 函数,函数可能会返回错误或生成错误的结果。

为避免这种问题,Vertica 建议您首先对所有空间对象运行 ST_IsValid 以验证参数。如果对象无效,则运行 STV_IsValidReason 以获取关于无效性原因的信息。

1 - ST_AsText

创建空间对象的熟知文本 (WKT) 表示。当需要指定 ASCII 形式的空间对象时可使用此函数。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范定义了 WKT 字符串的格式。

行为类型

不可变

语法

ST_AsText( g )

参数

g
需要获取 WKT 字符串的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

LONG VARCHAR

支持的数据类型

示例

以下示例显示了 ST_AsText 的用法。

检索 WKB 和 WKT 表示:

=> CREATE TABLE locations (id INTEGER, name VARCHAR(100), geom1 GEOMETRY(800),
   geom2 GEOGRAPHY);
CREATE TABLE
=> COPY locations
    (id, geom1x FILLER LONG VARCHAR(800), geom1 AS ST_GeomFromText(geom1x), geom2x FILLER LONG VARCHAR (800),
     geom2 AS ST_GeographyFromText(geom2x))
    FROM stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POINT(2 3)|
>> 2|LINESTRING(2 4,1 5)|
>> 3||POLYGON((-70.96 43.27,-70.67 42.95,-66.90 44.74,-67.81 46.08,-67.81 47.20,-69.22 47.43,-71.09 45.25,-70.96 43.27))
>> \\.
=> SELECT id, ST_AsText(geom1),ST_AsText(geom2) FROM locations ORDER BY id ASC;
 id |       ST_AsText       |                 ST_AsText
----+-----------------------+---------------------------------------------
  1 | POINT (2 3)           |
  2 | LINESTRING (2 4, 1 5) |
  3 |                       | POLYGON ((-70.96 43.27, -70.67 42.95, -66.9 44.74, -67.81 46.08, -67.81 47.2, -69.22 47.43, -71.09 45.25, -70.96 43.27))
(3 rows)

使用 Vertica SQL 函数 LENGTH 计算 WKT 的长度:

=> SELECT LENGTH(ST_AsText(St_GeomFromText('POLYGON ((-1 2, 0 3, 1 2,
                                                      0 1, -1 2))')));
 LENGTH
--------
     37
(1 row)

另请参阅

2 - ST_Area

计算空间对象的面积。

单位为:

  • GEOMETRY 对象:空间参照系标识符 (SRID) 单位

  • GEOGRAPHY 对象:平方米

行为类型

不可变

语法

ST_Area( g )

参数

g
需要计算面积的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_Area 的用法。

计算多边形的面积:

=> SELECT ST_Area(ST_GeomFromText('POLYGON((0 0,1 0,1 1,0 1,0 0))'));
 ST_Area
---------
       1
(1 row)

计算多边形集合的面积:


=> SELECT ST_Area(ST_GeomFromText('MultiPolygon(((0 0,1 0,1 1,0 1,0 0)),
   ((2 2,2 3,4 6,3 3,2 2)))'));
 ST_Area
---------
     3
(1 row)

如下图所示,假定多边形包含一个孔。

计算不包括孔面积在内的面积:

=> SELECT ST_Area(ST_GeomFromText('POLYGON((2 2,5 5,8 2,2 2),
   (4 3,5 4,6 3,4 3))'));
 ST_Area
---------
       8
(1 row)

计算几何图形集合的面积:

=> SELECT ST_Area(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((20.5 20.45,
   20.51 20.52,20.69 20.32,20.5 20.45)),POLYGON((10 20,30 40,25 50,10 20)))'));
 ST_Area
----------
 150.0073
(1 row)

计算地理对象的面积:

=> SELECT ST_Area(ST_GeographyFromText('POLYGON((20.5 20.45,20.51 20.52,
   20.69 20.32,20.5 20.45))'));
     ST_Area
------------------
 84627437.116037
(1 row)

3 - ST_AsBinary

创建空间对象的熟知二进制 (WKB) 表示。当需要将对象转换为二进制格式以便与其他应用程序移植空间数据时,可使用此函数。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范定义了 WKB 表示的格式。

行为类型

不可变

语法

ST_AsBinary( g )

参数

g
需要获取 WKB 的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

LONG VARBINARY

支持的数据类型

示例

以下示例显示了 ST_AsBinary 的用法。

检索 WKB 和 WKT 表示:

=> CREATE TABLE locations (id INTEGER, name VARCHAR(100), geom1 GEOMETRY(800), geom2 GEOGRAPHY);
CREATE TABLE
=> COPY locations
    (id, geom1x FILLER LONG VARCHAR(800), geom1 AS ST_GeomFromText(geom1x), geom2x FILLER LONG VARCHAR (800),
     geom2 AS ST_GeographyFromText(geom2x))
   FROM stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POINT(2 3)|
>> 2|LINESTRING(2 4,1 5)|
>> 3||POLYGON((-70.96 43.27,-70.67 42.95,-66.90 44.74,-67.81 46.08,-67.81 47.20,-69.22 47.43,-71.09 45.25,-70.96 43.27))
>> \\.
=> SELECT id, ST_AsText(geom1),ST_AsText(geom2) FROM locations ORDER BY id ASC;
 id |       ST_AsText       |                 ST_AsText
----+-----------------------+---------------------------------------------
  1 | POINT (2 3)           |
  2 | LINESTRING (2 4, 1 5) |
  3 |                       | POLYGON ((-70.96 43.27, -70.67 42.95, -66.9 44.74, -67.81 46.08, -67.81 47.2, -69.22 47.43, -71.09 45.25, -70.96 43.27))
=> SELECT id, ST_AsBinary(geom1),ST_AsBinary(geom2) FROM locations ORDER BY id ASC;
.
.
.
(3 rows)

使用 Vertica SQL 函数 LENGTH 计算 WKB 的长度:

=> SELECT LENGTH(ST_AsBinary(St_GeomFromText('POLYGON ((-1 2, 0 3, 1 2,
                                                        0 1, -1 2))')));
 LENGTH
--------
     93
(1 row)

另请参阅

ST_AsText

4 - ST_Boundary

计算指定 GEOMETRY 对象的边界。对象边界是指定义对象限制的点集。

对于线串,边界是起点和终点。对于多边形,边界是在同一点开始和结束的线串。

行为类型

不可变

语法

ST_Boundary( g )

参数

g
需要计算边界的空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Boundary 的用法。

返回表示边界的线串:

=> SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((-1 -1,2 2,
   0 1,-1 -1))')));
 ST_AsText
--------------
LINESTRING(-1 -1, 2 2, 0 1, -1 -1)
(1 row)

返回包含两个多边形边界的线串集合:

=> SELECT ST_AsText(ST_Boundary(ST_GeomFromText('POLYGON((2 2,5 5,8 2,2 2),
   (4 3,5 4,6 3,4 3))')));
                            ST_AsText
------------------------------------------------------------------
 MULTILINESTRING ((2 2, 5 5, 8 2, 2 2), (4 3, 5 4, 6 3, 4 3))
(1 row)

线串的边界是其起点和终点:

=> SELECT ST_AsText(ST_Boundary(ST_GeomFromText(
   'LINESTRING(1 1,2 2,3 3,4 4)')));
       ST_AsText
-----------------------
 MULTIPOINT (1 1, 4 4)
(1 row)

封闭的线串没有边界,因为它没有起点和终点:

=> SELECT ST_AsText(ST_Boundary(ST_GeomFromText(
   'LINESTRING(1 1,2 2,3 3,4 4,1 1)')));
    ST_AsText
------------------
 MULTIPOINT EMPTY
(1 row)

5 - ST_Buffer

创建与某个空间对象边界的距离大于或等于指定距离的 GEOMETRY 对象。该距离使用笛卡尔坐标单位测量。ST_Buffer 不接受大于 +1e15 或小于 –1e15 的距离大小。

行为类型

不可变

语法

ST_Buffer( g, d )

参数

g
需要计算缓冲区的空间对象,类型为 GEOMETRY
d
与对象之间的距离(以笛卡尔坐标单位为单位),类型为 FLOAT

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

使用提示

  • 如果指定正距离,则 ST_Buffer 将返回表示对象外部距离小于或等于指定距离的点的多边形。如果指定负距离,则 ST_Buffer 将返回表示对象内部距离小于或等于指定距离的点的多边形。

  • 对于点、多点、线串和多线串,如果指定负距离,ST_Buffer 将返回空多边形。

  • Vertica Place 版本的 ST_Buffer 将返回多边形形式的缓冲区,因此缓冲区对象在其顶点处包含拐角。它不包含圆角。

示例

以下示例显示了 ST_Buffer 的用法。

返回 GEOMETRY 对象:

=> SELECT ST_AsText(ST_Buffer(ST_GeomFromText('POLYGON((0 1,1 4,4 3,0 1))'),1));
                                  ST_AsText
------------------------------------------------------------------------------
POLYGON ((-0.188847498856 -0.159920845081, -1.12155598386 0.649012935089, 0.290814745534 4.76344136152,
 0.814758063466 5.02541302048, 4.95372324225 3.68665254814, 5.04124517538 2.45512549204, -0.188847498856 -0.159920845081))
(1 row)

6 - ST_Centroid

计算空间对象的几何中心(即质心)。如果几何图形除多边形外还存在点、线串或同时存在此二者,则质心计算仅考虑多边形。类似地,如果除线串外还存在点,则质心计算不考虑点。

要计算 GEOGRAPHY 对象的质心,请参阅 STV_GeometrySTV_Geography 的示例。

行为类型

不可变

语法

ST_Centroid( g )

参数

g
需要计算质心的空间对象,类型为 GEOMETRY

返回

GEOMETRY(仅 POINT)

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Centroid 的用法。

计算多边形的质心:

=> SELECT ST_AsText(ST_Centroid(ST_GeomFromText('POLYGON((-1 -1,2 2,-1 2,
   -1 -1))')));
  ST_AsText
------------
 POINT (-0 1)
(1 row)

计算多边形集合的质心:

=> SELECT ST_AsText(ST_Centroid(ST_GeomFromText('MULTIPOLYGON(((1 0,2 1,2 0,
   1 0)),((-1 -1,2 2,-1 2,-1 -1)))')));
               ST_AsText
--------------------------------------
 POINT (0.166666666667 0.933333333333)
(1 row)

此图显示了多边形集合的质心。

7 - ST_Contains

确定空间对象是否完全在另一个空间对象内部,并且不仅仅在其边界上存在。两个参数必须是相同的空间数据类型。要么指定两个 GEOMETRY 对象,要么指定两个 GEOGRAPHY 对象。

如果某个对象(例如点或线串)仅沿空间对象的边界存在,则 ST_Contains 将返回 False。线串的内部是线串上除起点和终点以外的所有点。

ST_Contains(g1, g2) 在功能上等同于 ST_Within(g2, g1)

不支持顶点或边界位于国际日期变更线 (IDL) 或南、北极的 GEOGRAPHY 多边形。

行为类型

不可变

语法

ST_Contains( g1, g2
                        [USING PARAMETERS spheroid={true | false}] )

参数

g1
空间对象,类型为 GEOMETRY 或 GEOGRAPHY
g2
空间对象,类型为 GEOMETRY 或 GEOGRAPHY

参数

spheroid = {true | false}

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

示例

以下示例显示了 ST_Contains 的用法。

第一个多边形未完全包含第二个多边形:

=> SELECT ST_Contains(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'),
   ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
 ST_Contains
-------------
 f
(1 row)

如果点在线串上,但不在终点上:

=> SELECT ST_Contains(ST_GeomFromText('LINESTRING(20 20,30 30)'),
   ST_GeomFromText('POINT(25 25)'));
 ST_Contains
--------------
 t
(1 row)

如果点在多边形的边界上:

=> SELECT ST_Contains(ST_GeographyFromText('POLYGON((20 20,30 30,30 25,20 20))'),
   ST_GeographyFromText('POINT(20 20)'));
 ST_Contains
--------------
 f
(1 row)

两个在空间上等效的多边形:

=> SELECT ST_Contains (ST_GeomFromText('POLYGON((-1 2, 0 3, 0 1, -1 2))'),
   ST_GeomFromText('POLYGON((0 3, -1 2, 0 1, 0 3))'));
 ST_Contains
--------------
 t
(1 row)

另请参阅

8 - ST_ConvexHull

计算包含 GEOMETRY 对象的最小凸 GEOMETRY 对象。

行为类型

不可变

语法

ST_ConvexHull( g )

参数

g
需要求取凸包的空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_ConvexHull 的用法。

对于几何图形集合中的点对:

=> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText('GEOMETRYCOLLECTION(
   POINT(1 1),POINT(0 0))')));
       ST_AsText
-----------------------
 LINESTRING (1 1, 0 0)
(1 row)

对于几何图形集合:

=> SELECT ST_AsText(ST_ConvexHull(ST_GeomFromText('GEOMETRYCOLLECTION(
   LINESTRING(2.5 3,-2 1.5), POLYGON((0 1,1 3,1 -2,0 1)))')));
                  ST_AsText
---------------------------------------------
 POLYGON ((1 -2, -2 1.5, 1 3, 2.5 3, 1 -2))
(1 row)

实线表示原始几何图形集合,虚线表示凸包。

9 - ST_Crosses

确定一个 GEOMETRY 对象是否与另一个 GEOMETRY 对象在空间上交叉。如果两个对象仅在边界上接触,则 ST_Crosses 将返回 FALSE。

如果以下两项均成立,则表示两个对象在空间上交叉:

  • 两个对象具有部分但非全部的公共内点。

  • 它们的相交结果的尺寸小于两个对象的最大尺寸。

行为类型

不可变

语法

ST_Crosses( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

BOOLEAN

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Crosses 的用法。

=> SELECT ST_Crosses(ST_GeomFromText('LINESTRING(-1 3,1 4)'),
   ST_GeomFromText('LINESTRING(-1 4,1 3)'));
 ST_Crosses
------------
 t
(1 row)

=> SELECT ST_Crosses(ST_GeomFromText('LINESTRING(-1 1,1 2)'),
   ST_GeomFromText('POLYGON((1 1,0 -1,3 -1,2 1,1 1))'));
 ST_Crosses
------------
 f
(1 row)

=> SELECT ST_Crosses(ST_GeomFromText('POINT(-1 4)'),
   ST_GeomFromText('LINESTRING(-1 4,1 3)'));
ST_ Crosses
------------
 f
(1 row)

10 - ST_Difference

计算空间对象没有与另一个空间对象相交的部分。

行为类型

不可变

语法

ST_Difference( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Difference 的用法。

两个重叠的线串:

=> SELECT ST_AsText(ST_Difference(ST_GeomFromText('LINESTRING(0 0,0 2)'),
   ST_GeomFromText('LINESTRING(0 1,0 2)')));
       ST_AsText
-----------------------
 LINESTRING (0 0, 0 1)
(1 row)
=> SELECT ST_AsText(ST_Difference(ST_GeomFromText('LINESTRING(0 0,0 3)'),
   ST_GeomFromText('LINESTRING(0 1,0 2)')));
                ST_AsText
------------------------------------------
 MULTILINESTRING ((0 0, 0 1), (0 2, 0 3))
(1 row)

两个重叠的多边形:

=> SELECT ST_AsText(ST_Difference(ST_GeomFromText('POLYGON((0 1,0 3,2 3,2 1,0 1))'),
   ST_GeomFromText('POLYGON((0 0,0 2,2 2,2 0,0 0))')));
            ST_AsText
-------------------------------------
 POLYGON ((0 2, 0 3, 2 3, 2 2, 0 2))
(1 row)

两个未相交的多边形:

=> SELECT ST_AsText(ST_Difference(ST_GeomFromText('POLYGON((1 1,1 3,3 3,3 1,
   1 1))'),ST_GeomFromText('POLYGON((1 5,1 7,-1 7,-1 5,1 5))')));
              ST_AsText
-------------------------------------
 POLYGON ((1 1, 1 3, 3 3, 3 1, 1 1))
(1 row)

11 - ST_Disjoint

确定两个 GEOMETRY 对象是否未相交也未接触。

如果 ST_Disjoint 针对一对 GEOMETRY 对象返回 TRUE,则 ST_Intersects 将针对这两个相同的对象返回 FALSE。

不支持顶点或边界位于国际日期变更线 (IDL) 或南、北极的 GEOGRAPHY 多边形。

行为类型

不可变

语法

ST_Disjoint( g1, g2
                         [USING PARAMETERS spheroid={true | false}] )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

参数

spheroid = {true | false}

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

数据类型
GEOGRAPHY (WGS84)
Point-Point
Linestring-Point
Polygon-Point
Multipolygon-Point

示例

以下示例显示了 ST_Disjoint 的用法。

两个未相交或接触的多边形:

=> SELECT ST_Disjoint (ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 0, 1 1, 2 2, 1 0))'));
 ST_Disjoint
-------------
 t
(1 row)

两个相交的线串:

=> SELECT ST_Disjoint(ST_GeomFromText('LINESTRING(-1 2,0 3)'),
   ST_GeomFromText('LINESTRING(0 2,-1 3)'));
 ST_Disjoint
-------------
 f
(1 row)

两个在一个点接触的多边形:

=> SELECT ST_Disjoint (ST_GeomFromText('POLYGON((-1 2, 0 3, 0 1, -1 2))'),
   ST_GeomFromText('POLYGON((0 2, 1 1, 1 2, 0 2))'));
 ST_Disjoint
--------------
 f
(1 row)

另请参阅

12 - ST_Distance

计算两个空间对象之间的最短距离。对于 GEOMETRY 对象,距离使用笛卡尔坐标单位测量。对于 GEOGRAPHY 对象,距离以米为单位测量。

g1g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

行为类型

不可变

语法

ST_Distance( g1, g2
        [USING PARAMETERS spheroid={ true | false } ] )

参数

g1
空间对象,类型为 GEOMETRY 或 GEOGRAPHY
g2
空间对象,类型为 GEOMETRY 或 GEOGRAPHY

参数

spheroid = { true | false }

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

FLOAT

支持的数据类型

兼容的 GEOGRAPHY 对:

建议

Vertica 建议在使用 ST_Distance 之前裁剪无效的数据。无效的地理值可能返回无保证的结果。

示例

以下示例显示了 ST_Distance 的用法。

两个多边形之间的距离:

=> SELECT ST_Distance(ST_GeomFromText('POLYGON((-1 -1,2 2,0 1,-1 -1))'),
                      ST_GeomFromText('POLYGON((5 2,7 4,5 5,5 2))'));
 ST_Distance
-------------
           3
(1 row)

点和线串之间的距离(以米为单位):

=> SELECT ST_Distance(ST_GeographyFromText('POINT(31.75 31.25)'),
    ST_GeographyFromText('LINESTRING(32 32,32 35,40.5 35,32 35,32 32)'));
   ST_Distance
------------------
 86690.3950562969
(1 row)

13 - ST_Envelope

计算包含指定的 GEOMETRY 对象的最小边界矩形。

行为类型

不可变

语法

ST_Envelope( g )

参数

g
需要求取最小边界矩形的空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Envelope 的用法。

返回最小边界矩形:

=> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('POLYGON((0 0,1 1,1 2,2 2,
   2 1,3 0,1.5 -1.5,0 0))')));
                 ST_AsText
-------------------------------------------
 POLYGON ((0 -1.5, 3 -1.5, 3 2, 0 2, 0 -1.5))
(1 row)

14 - ST_Equals

确定两个空间对象在空间上是否等效。ST_Equals 的两个对象的坐标及其 WKT/WKB 表示必须完全匹配才能返回 TRUE。

在确定空间等价关系时点的顺序不重要:

  • LINESTRING(1 2, 4 3) 等于 LINESTRING(4 3, 1 2)。

  • POLYGON ((0 0, 1 1, 1 2, 2 2, 2 1, 3 0, 1.5 -1.5, 0 0)) 等于 POLYGON((1 1 , 1 2, 2 2, 2 1, 3 0, 1.5 -1.5, 0 0, 1 1))。

  • MULTILINESTRING((1 2, 4 3),(0 0, -1 -4)) 等于 MULTILINESTRING((0 0, -1 -4),(1 2, 4 3))。

坐标存储为 FLOAT 类型。因此,在导入熟知文本 (WKT) 值时,由于浮点数表示的限制,预期会出现舍入误差。

g1g2 必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。此外,g1g2 不能都是 GeometryCollection 类型。

行为类型

不可变

语法

ST_Equals( g1, g2 )

参数

g1
要与 g2 相比的空间对象,类型为 GEOMETRY 或 GEOGRAPHY
g2
要与 g1 相比的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

BOOLEAN

支持的数据类型

示例

以下示例显示了 ST_Equals 的用法。

两个线串:

=> SELECT ST_Equals (ST_GeomFromText('LINESTRING(-1 2, 0 3)'),
   ST_GeomFromText('LINESTRING(0 3, -1 2)'));
 ST_Equals
--------------
 t
(1 row)

两个多边形:

=> SELECT ST_Equals (ST_GeographyFromText('POLYGON((43.22 42.21,40.3 39.88,
   42.1 50.03,43.22 42.21))'),ST_GeographyFromText('POLYGON((43.22 42.21,
   40.3 39.88,42.1 50.31,43.22 42.21))'));
 ST_Equals
--------------
 f
(1 row)

15 - ST_GeographyFromText

将熟知文本 (WKT) 字符串转换为其对应的 GEOGRAPHY 对象。使用此函数可将 WKT 字符串转换为 Vertica Place 函数所需的格式。

GEOGRAPHY 对象是在地球表面使用坐标 (longitude, latitude) 定义的空间对象。坐标使用划分地球的参考平面的度数(经度、纬度)表示。

GEOGRAPHY 对象的最大大小为 10 MB。如果将 WKT 传递给 ST_GeographyFromText 并且生成大小超过 10 MB 的空间对象,ST_GeographyFromText 将会返回错误。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范的第 7 节定义了 WKT 字符串的格式。

行为类型

不可变

语法

ST_GeographyFromText( wkt [ USING PARAMETERS ignore_errors={'y'|'n'} ] )

参数

wkt
GEOGRAPHY 对象的熟知文本 (WKT) 字符串,类型为 LONG VARCHAR
ignore_errors
(可选)ST_GeographyFromText 将基于提供的参数返回以下结果:
  • NULL—如果 wkt 无效并且 ignore_errors='y'

  • Error—如果 wkt 无效并且 ignore_errors='n' 或未指定。

返回

GEOGRAPHY

支持的数据类型

示例

以下示例显示了 ST_GeographyFromText 的用法。

将 WKT 转换为 GEOGRAPHY 对象:

=> CREATE TABLE wkt_ex (g GEOGRAPHY);
 CREATE TABLE
=> INSERT INTO wkt_ex VALUES(ST_GeographyFromText('POLYGON((1 2,3 4,2 3,1 2))'));
 OUTPUT
--------
      1
(1 row)

16 - ST_GeographyFromWKB

将熟知二进制 (WKB) 值转换为其对应的 GEOGRAPHY 对象。使用此函数可将 WKB 转换为 Vertica Place 函数所需的格式。

GEOGRAPHY 对象是在地球表面定义的空间对象。坐标使用划分地球的参考平面的度数(经度、纬度)表示。所有的计算都以米为单位。

GEOGRAPHY 对象的最大大小为 10 MB。如果将 WKB 传递给 ST_GeographyFromWKB 并且生成大小超过 10 MB 的空间对象,ST_GeographyFromWKB 将会返回错误。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范的第 8 节定义了 WKB 表示的格式。

行为类型

不可变

语法

ST_GeographyFromWKB( wkb [ USING PARAMETERS ignore_errors={'y'|'n'} ] )

参数

wkb
GEOGRAPHY 对象的熟知二进制 (WKB) 值,类型为 LONG VARBINARY
ignore_errors
(可选)ST_GeographyFromWKB 基于提供的参数返回以下结果:
  • NULL—如果 wkb 无效并且 ignore_errors='y'

  • Error—如果 wkb 无效并且 ignore_errors='n' 或未指定。

返回

GEOGRAPHY

支持的数据类型

示例

以下示例显示了 ST_GeographyFromWKB 的用法。

将 WKB 转换为 GEOGRAPHY 对象:

=> CREATE TABLE wkb_ex (g GEOGRAPHY);
CREATE TABLE
=> INSERT INTO wkb_ex VALUES(ST_GeographyFromWKB(X'0103000000010000000 ... );
 OUTPUT
--------
      1
(1 row)

17 - ST_GeoHash

以指定的几何图形形状返回 GeoHash。

行为类型

不可变

语法

ST_GeoHash( SpatialObject [ USING PARAMETERS numchars=n] )

参数

Spatial object
GEOMETRY 或 GEOGRAPHY 空间对象。对于给定几何图形内的所有点,输入必须采用极坐标(-180 <= x <= 180 和 -90 <= y <= 90)。
n
指定返回的 GeoHash 的长度(以字符为单位)。

返回

GEOHASH

支持的数据类型

示例

以下示例显示了如何使用 ST_PointFromGeoHash。

为指定几何图形生成全精度 GeoHash:

=> SELECT ST_GeoHash(ST_GeographyFromText('POINT(3.14 -1.34)'));
ST_GeoHash
----------------------
kpf0rkn3zmcswks75010
(1 row)

根据指定几何图形的前五个字符生成 GeoHash:

=>  select ST_GeoHash(ST_GeographyFromText('POINT(3.14 -1.34)')USING PARAMETERS numchars=5);
ST_GeoHash
------------
kpf0r
(1 row)

18 - ST_GeometryN

返回几何图形对象内的第 n 个几何图形。

如果 n 超出索引范围,则返回 NULL。

行为类型

不可变

语法

ST_GeometryN( g , n )

参数

g
GEOMETRY 类型的空间对象。
n
几何图形的索引号,从 1 开始。

返回

GEOMETRY

支持的数据类型

示例

以下示例显示了 ST_GeometryN 的用法。

返回多边形集合中的第二个几何图形:

=> CREATE TABLE multipolygon_geom (gid int, geom GEOMETRY(1000));
CREATE TABLE
=> COPY multipolygon_geom(gid, gx FILLER LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>>9|MULTIPOLYGON(((2 6, 2 9, 6 9, 7 7, 4 6, 2 6)),((0 0, 0 5, 1 0, 0 0)),((0 2, 2 5, 4 5, 0 2)))
>>\.
=> SELECT gid, ST_AsText(ST_GeometryN(geom, 2)) FROM multipolygon_geom;
 gid |           ST_AsText
-----+--------------------------------
   9 | POLYGON ((0 0, 0 5, 1 0, 0 0))
(1 row)

返回多边形集合内的所有几何图形:


=> CREATE TABLE multipolygon_geom (gid int, geom GEOMETRY(1000));
CREATE TABLE
=> COPY multipolygon_geom(gid, gx FILLER LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>>9|MULTIPOLYGON(((2 6, 2 9, 6 9, 7 7, 4 6, 2 6)),((0 0, 0 5, 1 0, 0 0)),((0 2, 2 5, 4 5, 0 2)))
>>\.
=> CREATE TABLE series_numbers (numbs int);
CREATE TABLE
=> COPY series_numbers FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1
>> 2
>> 3
>> 4
>> 5
>> \.
=> SELECT numbs, ST_AsText(ST_GeometryN(geom, numbs))
   FROM multipolygon_geom, series_numbers
   WHERE ST_AsText(ST_GeometryN(geom, numbs)) IS NOT NULL
   ORDER BY numbs ASC;
 numbs |                ST_AsText
-------+------------------------------------------
     1 | POLYGON ((2 6, 2 9, 6 9, 7 7, 4 6, 2 6))
     2 | POLYGON ((0 0, 0 5, 1 0, 0 0))
     3 | POLYGON ((0 2, 2 5, 4 5, 0 2))
(3 rows)

另请参阅

ST_NumGeometries

19 - ST_GeometryType

确定空间对象的类。

行为类型

不可变

语法

ST_GeometryType( g )

参数

g
需要确定类的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

VARCHAR

支持的数据类型

示例

以下示例显示了 ST_GeometryType 的用法。

返回空间类:

=> SELECT ST_GeometryType(ST_GeomFromText('GEOMETRYCOLLECTION(LINESTRING(1 1,
   2 2), POLYGON((1 3,4 5,2 2,1 3)))'));
    ST_GeometryType
-----------------------
 ST_GeometryCollection
(1 row)

20 - ST_GeomFromGeoHash

以指定的 GeoHash 形状返回多边形。

行为类型

不可变

语法

ST_GeomFromGeoHash(GeoHash)

参数

GeoHash
任意长度的有效 GeoHash 字符串。

返回

GEOGRAPHY

示例

以下示例显示了如何使用 ST_GeomFromGeoHash。

将 GeoHash 字符串转换为 Geography 对象并转换回 GeoHash

=>  SELECT ST_GeoHash(ST_GeomFromGeoHash(‘vert1c9’));
ST_GeoHash
--------------------
vert1c9
(1 row)

返回指定 GeoHash 的多边形并使用 ST_AsText 将多边形、矩形图块转换为熟知文本:

=>  SELECT ST_AsText(ST_GeomFromGeoHash('drt3jj9n4dpcbcdef'));
ST_AsText
------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON ((-71.1459699298 42.3945346513, -71.1459699297 42.3945346513, -71.1459699297 42.3945346513, -71.1459699298 42.3945346513, -71.1459699298 42.3945346513))
(1 row)

返回指定 GeoHash 的多个多边形及其面积。高级 GeoHash (1234) 的多边形面积很大,而低级 GeoHash (1234567890bcdefhjkmn) 的面积为零。

=>  SELECT ST_Area(short) short_area, ST_AsText(short) short_WKT, ST_Area(long) long_area, ST_AsText(long) long_WKT from (SELECT ST_GeomFromGeoHash('1234') short, ST_GeomFromGeoHash('1234567890bcdefhjkmn') long) as foo;
-[ RECORD 1 ]---------------------------------------------------------------------------------------------------------------------------------------------------------------------
short_area | 24609762.8991076
short_WKT  | POLYGON ((-122.34375 -88.2421875, -121.9921875 -88.2421875, -121.9921875 -88.06640625, -122.34375 -88.06640625, -122.34375 -88.2421875))
long_area  | 0
long_WKT   | POLYGON ((-122.196077187 -88.2297377551, -122.196077187 -88.2297377551, -122.196077187 -88.2297377551, -122.196077187 -88.2297377551, -122.196077187 -88.2297377551))

21 - ST_GeomFromGeoJSON

标准格式的 GeoJSON 记录的几何图形部分转换为 GEOMETRY 对象。当您提供 GeoJSON 功能或 FeatureCollection 对象时,此函数会返回错误。

行为类型

不可变

语法

ST_GeomFromGeoJSON( geojson [, srid] [ USING PARAMETERS param=value[,...] ] );

参数

geojson
包含 GeoJSON GEOMETRY 对象的字符串,类型为 LONG VARCHAR。

Vertica 接受以下 GeoJSON 键值:

  • 类型

  • 坐标

  • 几何形状

其他键值被忽略。

srid

GEOMETRY 对象的空间参照系标识符 (SRID),类型为 INTEGER。

SRID 将存储在 GEOMETRY 对象中,但不影响空间计算的结果。

该实参在不执行操作时是可选的。

参数

ignore_3d
(可选)布尔值,是从返回的 GEOMETRY 对象中静默移除 3D 和更高维数据还是返回错误,取决于以下值:
  • true:从返回的 GEOMETRY 对象中移除 3D 和更高维数据。

  • false(默认值):当 GeoJSON 包含 3D 或更高维数据时返回错误。

ignore_errors
(可选)布尔值,是忽略无效 GeoJSON 对象上的错误还是返回错误,取决于以下值:
  • true:在 GeoJSON 解析期间忽略错误并返回 NULL。

  • false(默认值):如果 GeoJSON 解析失败,则返回错误。

返回

GEOMETRY

支持的数据类型

  • Point

  • Multipoint

  • Linestring

  • Multilinestring

  • Polygon

  • Multipolygon

  • GeometryCollection

示例

以下示例显示了如何使用 ST_GeomFromGeoJSON。

验证单个记录

以下示例使用 ST_IsValid 验证 ST_GeomFromGeoJSON 语句。该语句包含 SRID 4326 以指示点数据类型表示纬度和经度坐标,并将 ignore_3d 设置为 true 以忽略表示高度的最后一个值:

=> SELECT ST_IsValid(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[35.3606, 138.7274, 29032]}', 4326 USING PARAMETERS ignore_3d=true));
 ST_IsValid
------------
 t
(1 row)

将数据加载到表中

以下示例处理来自 STDIN 的 GeoJSON 类型并将它们存储在 GEOMETRY 数据类型表列中:

  1. 创建一个名为 polygons 的表,用于存储 GEOMETRY 空间类型:

    => CREATE TABLE polygons(geom GEOMETRY(1000));
    CREATE TABLE
    
  2. 使用 COPY 从 STDIN 读取支持的 GEOMETRY 数据类型并将它们存储在名为 geom 的对象中:

    => COPY polygons(geojson filler VARCHAR(1000), geom as ST_GeomFromGeoJSON(geojson)) FROM STDIN;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> { "type": "Polygon", "coordinates": [ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0] ] ] }
    >> { "type": "Point", "coordinates": [1, 2] }
    >> { "type": "Polygon", "coordinates": [ [ [1, 3], [3, 2], [1, 1], [3, 0], [1, 0], [1, 3] ] ] }
    >> \.
    
  3. 查询 polygons 表。下面的示例使用 ST_AsText 返回 geom 对象的 熟知文本 (WKT) 表示形式,并且使用 ST_IsValid 来验证每个对象:

    => SELECT ST_AsText(geom), ST_IsValid(geom) FROM polygons;
                       ST_AsText                   | ST_IsValid
    -----------------------------------------------+------------
     POINT (1 2)                                   | t
     POLYGON ((1 3, 3 2, 1 1, 3 0, 1 0, 1 3))      | f
     POLYGON ((100 0, 101 0, 101 1, 100 1, 100 0)) | t
    (3 rows)
    

22 - ST_GeomFromText

将熟知文本 (WKT) 字符串转换为其对应的 GEOMETRY 对象。使用此函数可将 WKT 字符串转换为 Vertica Place 函数所需的格式。

GEOMETRY 对象是按平面坐标定义的空间对象。坐标表示为笛卡尔平面上的点 (x,y)。SRID 值为 0 至 232-1 是有效的。超出此范围的 SRID 值将会生成错误。

GEOMETRY 对象的最大大小为 10 MB。如果将 WKT 传递给 ST_GeomFromText 并且生成大小超过 10 MB 的空间对象,ST_GeomFromText 将会返回错误。

开放地理空间联盟 (OGC) 定义了 WKT 表示的格式。请参见 简易功能访问第 1 部分 - 通用架构规范第 7 节。

行为类型

不可变

语法

ST_GeomFromText( wkt [, srid] [ USING PARAMETERS ignore_errors={'y'|'n'} ])

参数

wkt
GEOMETRY 对象的熟知文本 (WKT) 字符串,类型为 LONG VARCHAR。
srid
(不执行操作时可选)

GEOMETRY 对象的空间参照系标识符 (SRID),类型为 INTEGER。

SRID 将存储在 GEOMETRY 对象中,但不影响空间计算的结果。

ignore_errors
(可选)ST_GeomFromText 将基于提供的参数返回以下结果:
  • NULL—如果 wkt 无效并且 ignore_errors='y'

  • Error—如果 wkt 无效并且 ignore_errors='n' 或未指定。

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_GeomFromText 的用法。

将 WKT 转换为 GEOMETRY 对象:


=> SELECT ST_Area(ST_GeomFromText('POLYGON((1 1,2 3,3 5,0 5,1 -2,0 0,1 1))'));
 ST_Area
---------
       6
(1 row)

23 - ST_GeomFromWKB

将熟知二进制 (WKB) 值转换为其对应的 GEOMETRY 对象。使用此函数可将 WKB 转换为许多 Vertica Place 函数所需的格式。

GEOMETRY 对象是在笛卡尔平面中定义的使用 (x,y) 坐标的空间对象。

GEOMETRY 对象的最大大小为 10 MB。如果将 WKB 传递给 ST_GeomFromWKB 并且生成大小超过 10 MB 的空间对象,ST_GeomFromWKB 将会返回错误。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范的第 8 节定义了 WKB 表示的格式。

行为类型

不可变

语法

ST_GeomFromWKB( wkb[, srid] [ USING PARAMETERS ignore_errors={'y'|'n'} ])

参数

wkb
GEOMETRY 对象的熟知二进制 (WKB) 值,类型为 LONG VARBINARY
srid
(可选)GEOMETRY 对象的空间参照系标识符 (SRID),类型为 INTEGER。

SRID 将存储在 GEOMETRY 对象中,但不影响空间计算的结果。

ignore_errors
(可选)ST_GeomFromWKB 将基于提供的参数返回以下结果:
  • NULL—如果 wkb 无效并且 ignore_errors='y'

  • Error—如果 wkb 无效并且 ignore_errors='n' 或未指定。

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_GeomFromWKB 的用法。

将 GEOMETRY 转换为 WKT:

=> CREATE TABLE t(g GEOMETRY);
CREATE TABLE
=> INSERT INTO t VALUES(
ST_GeomFromWKB(X'0103000000010000000400000000000000000000000000000000000000000000000000f
               03f0000000000000000f64ae1c7022db544000000000000f03f00000000000000000000000000000000'));
 OUTPUT
--------
      1
(1 row)
=> SELECT ST_AsText(g) from t;
             ST_AsText
------------------------------------
 POLYGON ((0 0, 1 0, 1e+23 1, 0 0))
(1 row)

24 - ST_Intersection

计算两个 GEOMETRY 对象共有的点集。

行为类型

不可变

语法

ST_Intersection( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Intersection 的用法。

两个多边形相交于一个点:

=> SELECT ST_AsText(ST_Intersection(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,
   0 2))'),ST_GeomFromText('POLYGON((-1 2,0 0,-2 0,-1 2))')));
    ST_AsText
-----------------
 POINT(0 0)
(1 row)

两个多边形:

=> SELECT ST_AsText(ST_Intersection(ST_GeomFromText('POLYGON((1 2,1 5,4 5,
   4 2,1 2))'), ST_GeomFromText('POLYGON((3 1,3 3,5 3,5 1,3 1))')));
 ST_AsText
------------------
POLYGON ((4 3, 4 2, 3 2, 3 3, 4 3))
(1 row)

两个未相交的线串:

=> SELECT ST_AsText(ST_Intersection(ST_GeomFromText('LINESTRING(1 1,1 3,3 3)'),
   ST_GeomFromText('LINESTRING(1 5,1 7,-1 7)')));
        ST_AsText
--------------------------
 GEOMETRYCOLLECTION EMPTY
(1 row)

25 - ST_Intersects

确定两个 GEOMETRY 或 GEOGRAPHY 对象是否在一个点相交或接触。对于相同的 GEOMETRY 或 GEOGRAPHY 对象,如果 ST_Disjoint 返回 TRUE,则 ST_Intersects 将返回 FALSE。

不支持顶点或边界位于国际日期变更线 (IDL) 或南、北极的 GEOGRAPHY 多边形。

行为类型

不可变

语法

ST_Intersects( g1, g2
                  [USING PARAMETERS bbox={true | false}, spheroid={true | false}])

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

参数

bbox = {true | false}
Boolean。与 g1g2 的边界框相交。

默认值: False

spheroid = {true | false}

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

数据类型
GEOGRAPHY (WGS84)
Point-Point
Linestring-Point
Polygon-Point
Multipolygon-Point

示例

以下示例显示了 ST_Intersects 的用法。

两个多边形未相交或接触:

=> SELECT ST_Intersects (ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 0,1 1,2 2,1 0))'));
 ST_Intersects
--------------
 f
(1 row)

两个多边形在一个点接触:

=> SELECT ST_Intersects (ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 0,1 1,0 1,1 0))'));
 ST_Intersects
--------------
 t
(1 row)

两个多边形相交:

=> SELECT ST_Intersects (ST_GeomFromText('POLYGON((-1 2, 0 3, 0 1, -1 2))'),
   ST_GeomFromText('POLYGON((0 2, -1 3, -2 0, 0 2))'));
 ST_Intersects
--------------
 t
(1 row)

另请参阅

ST_Disjoint

26 - ST_IsEmpty

确定空间对象是否表示空集。空对象没有维度。

行为类型

不可变

语法

ST_IsEmpty( g )

参数

g
空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

BOOLEAN

支持的数据类型

示例

以下示例显示了 ST_IsEmpty 的用法。

空多边形:

=> SELECT ST_IsEmpty(ST_GeomFromText('GeometryCollection EMPTY'));
 ST_IsEmpty
------------
 t
(1 row)

27 - ST_IsSimple

确定空间对象是否未与自身相交,也未接触其自身边界上的任何点。

行为类型

不可变

语法

ST_IsSimple( g )

参数

g
空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

BOOLEAN

支持的数据类型

示例

以下示例显示了 ST_IsSimple 的用法。

多边形未与自身相交:

=> SELECT ST_IsSimple(ST_GeomFromText('POLYGON((-1 2,0 3,1 2,1 -2,-1 2))'));
 ST_IsSimple
--------------
 t
(1 row)

线串与自身相交:

=> SELECT ST_IsSimple(ST_GeographyFromText('LINESTRING(10 10,25 25,26 34.5,
   10 30,10 20,20 10)'));
 St_IsSimple
-------------
 f
(1 row)

线串在一个或多个位置接触其内部:

=> SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(0 0,0 1,1 0,2 1,2 0,0 0)'));
 ST_IsSimple
-------------
 f
(1 row)

28 - ST_IsValid

确定空间对象的格式是否正确或其是否有效。如果对象有效,则 ST_IsValid 返回 TRUE;否则它将返回 FALSE。使用 STV_IsValidReason 以确定无效性原因。

空间有效性仅适用于多边形和多边形集合。如果以下所有项均成立,则多边形或多边形集合是有效的:

  • 多边形是封闭的;其起点与终点相同。

  • 其边界是一组线串。

  • 边界不触及或穿越本身。

  • 内部的任何多边形都未接触外部多边形边界除顶点以外的任何位置。

开放地理空间联盟 (OGC)OGC 简易功能访问第 1 部分 - 通用架构规范的第 6.1.11.1 节定义了多边形的有效性。

如果不确定多边形是否有效,请先运行 ST_IsValid。如果将无效的空间对象传递给 Vertica Place 函数,函数将会失败或返回错误的结果。

行为类型

不可变

语法

ST_IsValid( g )

参数

g
用于测试有效性的地理空间对象,其值类型为 GEOMETRY 或 GEOGRAPHY (WGS84)。

返回

BOOLEAN

支持的数据类型

示例

以下示例显示了 ST_IsValid 的用法。

有效的多边形:

=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,1 3,3 3,3 1,1 1))'));
 ST_IsValid
------------
 t
(1 row)

无效的多边形:

=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 3,3 2,1 1,3 0,1 0,1 3))'));
 ST_IsValid
------------
 f
(1 row)

无效的多边形:

=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,2 2,0 2,2 0,0 0))'));
 ST_IsValid
------------
 f
(1 row)

无效的多边形集合:

=> SELECT ST_IsValid(ST_GeomFromText('MULTIPOLYGON(((0 0, 0 1, 1 1, 0 0)),
   ((0.5 0.5, 0.7 0.5, 0.7 0.7, 0.5 0.7, 0.5 0.5)))'));
 ST_IsValid
------------
 f
(1 row)

包含孔的有效多边形:

=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,3 3,6 -1,0.5 -1,1 1),
   (1 1,3 1,2 0,1 1))'));
 ST_IsValid
------------
 t
(1 row)

包含孔的无效多边形:

=> SELECT ST_IsValid(ST_GeomFromText('POLYGON((1 1,3 3,6 -1,0.5 -1,1 1),
   (1 1,4.5 1,2 0,1 1))'));
 ST_IsValid
------------
 f
(1 row)

29 - ST_Length

计算空间对象的长度。对于 GEOMETRY 对象,长度使用笛卡尔坐标单位测量。对于 GEOGRAPHY 对象,长度以米为单位测量。

按以下方法计算长度:

  • 点或点集合对象的长度为 0。

  • 线串的长度是每个线段的长度之和;而线段的长度是起点到终点的距离。

  • 多边形的长度是外部边界和任何内部边界的长度之和。

  • 线串集合、多边形集合或 geometrycollection 的长度是它所包含的所有对象的长度之和。

行为类型

不可变

语法

ST_Length( g )

参数

g
需要计算长度的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_Length 的用法。

返回以笛卡尔坐标单位为单位的长度:

=> SELECT ST_Length(ST_GeomFromText('LINESTRING(-1 -1,2 2,4 5,6 7)'));
    ST_Length
------------------
 10.6766190873295
(1 row)

返回以米为单位的长度:

=> SELECT ST_Length(ST_GeographyFromText('LINESTRING(-56.12 38.26,-57.51 39.78,
   -56.37 45.24)'));
    ST_Length
------------------
 821580.025733461
(1 row)

30 - ST_NumGeometries

返回空间对象内包含的几何图形数量。单个 GEOMETRY 或 GEOGRAPHY 对象将返回 1,空对象将返回 NULL。

行为类型

不可变

语法

ST_NumGeometries( g )

参数

g

GEOMETRY 或 GEOGRAPHY 类型的空间对象

返回

INTEGER

支持的数据类型

示例

以下示例显示了 ST_NumGeometries 的用法。

返回几何图形的数量:


=> SELECT ST_NumGeometries(ST_GeomFromText('MULTILINESTRING ((1 5, 2 4, 5 3, 6 6), (3 5, 3 7))'));
 ST_NumGeometries
------------------
                2
(1 row)

另请参阅

ST_GeometryN

31 - ST_NumPoints

计算空间对象的顶点数,空对象则返回 NULL。

多边形和多边形集合的第一个顶点和最后一个顶点单独计数。

行为类型

不可变

语法

ST_NumPoints( g )

参数

g
需要计数顶点的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

INTEGER

支持的数据类型

示例

以下示例显示了 ST_NumPoints 的用法。

返回线串中的顶点数:

=> SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(1.33 1.56,2.31 3.4,2.78 5.82,
   3.76 3.9,4.11 3.27,5.85 4.34,6.9 4.231,7.61 5.77)'));
 ST_NumPoints
--------------
            8
(1 row)

使用 ST_Boundary 和 ST_NumPoints 返回多边形的顶点数:

=> SELECT ST_NumPoints(ST_Boundary(ST_GeomFromText('POLYGON((1 2,1 4,
   2 5,3 6,4 6,5 5,4 4,3 3,1 2))')));
 ST_NumPoints
--------------
            9
(1 row)

32 - ST_Overlaps

确定 GEOMETRY 对象是否与另一个 GEOMETRY 对象共享空间但未完全包含在该对象范围内。它们必须在其内部重叠。如果两个对象在单个点接触,或仅仅沿边界相交,则二者没有重叠。两个参数必须具有相同的维度;否则 ST_Overlaps 将返回 FALSE。

行为类型

不可变

语法

ST_Overlaps ( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

BOOLEAN

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Overlaps 的用法。

Polygon_1 与 Polygon_2 重叠但未完全包含 Polygon_2:

=> SELECT ST_Overlaps(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 0 0))'),
   ST_GeomFromText('POLYGON((0.5 0.5, 0.7 0.5, 0.7 0.7, 0.5 0.7, 0.5 0.5))'));
 ST_Overlaps
-------------
 t
(1 row)

具有不同维度的两个对象:

=> SELECT ST_Overlaps(ST_GeomFromText('LINESTRING(2 2,4 4)'),
   ST_GeomFromText('POINT(3 3)'));
 ST_Overlaps
-------------
 f
(1 row)

33 - ST_PointFromGeoHash

返回指定 GeoHash 的中心点。

行为类型

不可变

语法

ST_PointFromGeoHash(GeoHash)

参数

GeoHash
任意长度的有效 GeoHash 字符串。

返回

GEOGRAPHY POINT

示例

以下示例显示了如何使用 ST_PointFromGeoHash。

返回高级 GeoHash 的地理点并使用 ST_AsText 将该点转换为熟知文本:

=>  SELECT ST_AsText(ST_PointFromGeoHash('dr'));
ST_AsText
-------------------------
POINT (-73.125 42.1875)
(1 row)

返回详细 GeoHash 的地理点并使用 ST_AsText 将该点转换为熟知文本:

=>  SELECT ST_AsText(ST_PointFromGeoHash('1234567890bcdefhjkmn'));
ST_AsText
---------------------------------------
POINT (-122.196077187 -88.2297377551)
(1 row)

34 - ST_PointN

查找空间对象的第 n 个点。如果传递负数、零或大于线串上的总点数的数字,ST_PointN 将返回 NULL。

顶点顺序基于空间对象的熟知文本 (WKT) 表示。

行为类型

不可变

语法

ST_PointN( g, n )

参数

g
要搜索的空间对象,类型为 GEOMETRY 或 GEOGRAPHY
n
将要返回的空间对象中的点。索引从一开始,类型为 INTEGER

返回

GEOMETRY 或 GEOGRAPHY

支持的数据类型

示例

以下示例显示了 ST_PointN 的用法。

返回第 5 个点:

=> SELECT ST_AsText(ST_PointN(ST_GeomFromText('
          POLYGON(( 2 6, 2 9, 6 9, 7 7, 4 6, 2 6))'), 5));
  ST_AsText
-------------
 POINT (4 6)
(1 row)

返回第 2 个点:

=> SELECT ST_AsText(ST_PointN(ST_GeographyFromText('
          LINESTRING(23.41 24.93,34.2 32.98,40.7 41.19)'), 2));
     ST_AsText
--------------------
 POINT (34.2 32.98)
(1 row)

35 - ST_Relate

基于指定的 DE-9IM 模式矩阵字符串,确定给定的 GEOMETRY 对象是否与另一个 GEOMETRY 对象在空间上相关。

DE-9IM 标准确定了两个对象彼此在空间上的相关性。

行为类型

不可变

语法

ST_Relate( g1, g2, matrix )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY
matrix
DE-9IM 模式矩阵字符串,类型为 CHAR(9)。此字符串表示 3 x 3 限制矩阵,对应两个几何图形各自的内部、边界和外部交集的维度限制。必须恰好包含 9 个以下字符:
  • T

  • F

  • 0

  • 1

  • 2

  • *

返回

BOOLEAN

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Relate 的用法。

“等于”对应的 DE-9IM 模式为'T*F**FFF2'

=> SELECT ST_Relate(ST_GeomFromText('LINESTRING(0 1,2 2)'),
   ST_GeomFromText('LINESTRING(2 2,0 1)'), 'T*F**FFF2');
 ST_Relate
--------------
 t
(1 row)

“重叠”对应的 DE-9IM 模式为'T*T***T**'

=> SELECT ST_Relate(ST_GeomFromText('POLYGON((-1 -1,0 1,2 2,-1 -1))'),
   ST_GeomFromText('POLYGON((0 1,1 -1,1 1,0 1))'), 'T*T***T**');
 ST_Relate
-----------
 t
(1 row)

36 - ST_SRID

确定随空间对象存储的空间参照系标识符 (SRID)。

将 SRID 传递给 ST_GeomFromText 或 ST_GeomFromWKB 后才能确定 GEOMETRY 对象的 SRID。ST_SRID 将返回此存储值。SRID 值为 0 至 232-1 是有效的。

行为类型

不可变

语法

ST_SRID( g )

参数

g
需要 SRID 的空间对象,类型为 GEOMETRY 或 GEOGRAPHY

返回

INTEGER

支持的数据类型

示例

以下示例显示了 ST_SRID 的用法。

GEOMETRY 对象的默认 SRID 为 0:

=> SELECT ST_SRID(ST_GeomFromText(
      'POLYGON((-1 -1,2 2,0 1,-1 -1))'));
 ST_SRID
---------
 0
(1 row)

GEOGRAPHY 对象的默认 SRID 为 4326:

=> SELECT ST_SRID(ST_GeographyFromText(
      'POLYGON((22 35,24 35,26 32,22 35))'));
 ST_SRID
---------
 4326
(1 row)

37 - ST_SymDifference

计算两个 GEOMETRY 对象中除它们共有的点之外的其他所有点,包括这两个对象的边界。

该结果被称为对称差,在数学上表示为: Closure (*g1 *– g2) È Closure (*g2 *– g1)

行为类型

不可变

语法

ST_SymDifference( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_SymDifference 的用法。

返回两个线串:

=> SELECT ST_AsText(ST_SymDifference(ST_GeomFromText('LINESTRING(30 40,
   30 55)'),ST_GeomFromText('LINESTRING(30 32.5,30 47.5)')));
    ST_AsText
-----------------
MULTILINESTRING ((30 47.5, 30 55),(30 32.5,30 40))
(1 row)

返回四个正方形:

=> SELECT ST_AsText(ST_SymDifference(ST_GeomFromText('POLYGON((2 1,2 4,3 4,
   3 1,2 1))'),ST_GeomFromText('POLYGON((1 2,1 3,4 3,4 2,1 2))')));
                                ST_AsText
-------------------------------------------------------------------------
 MULTIPOLYGON (((2 1, 2 2, 3 2, 3 1, 2 1)), ((1 2, 1 3, 2 3, 2 2, 1 2)),
 ((2 3, 2 4, 3 4, 3 3, 2 3)), ((3 2, 3 3, 4 3, 4 2, 3 2)))
(1 row)

38 - ST_Touches

确定两个 GEOMETRY 对象是否在一个点接触或沿边界接触,但没有内部相交。

不支持顶点或边界位于国际日期变更线 (IDL) 或南、北极的 GEOGRAPHY 多边形。

行为类型

不可变

语法

ST_Touches( g1, g2
                        [USING PARAMETERS spheroid={true | false}] )

参数

g1
空间对象,类型为 GEOMETRY 的值
g2
空间对象,类型为 GEOMETRY 的值

参数

spheroid = {true | false}

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

数据类型
GEOGRAPHY (WGS84)
Point-Point
Linestring-Point
Polygon-Point
Multipolygon-Point

示例

以下示例显示了 ST_Touches 的用法。

两个多边形在一个点接触:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 3,0 3,1 2,1 3))'));
 ST_Touches
------------
 t
(1 row)

两个多边形仅在沿部分边界接触:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((1 2,0 3,0 1,1 2))'));
 ST_Touches
------------
 t
(1 row)

两个多边形未在任何点接触:

=> SELECT ST_Touches(ST_GeomFromText('POLYGON((-1 2,0 3,0 1,-1 2))'),
   ST_GeomFromText('POLYGON((0 2,-1 3,-2 0,0 2))'));
 ST_Touches
------------
 f
(1 row)

39 - ST_Transform

返回一个新的 GEOMETRY,其坐标转换为 srid 实参使用的空间参考系统标识符 (SRID)。

此函数支持以下转换:

  • EPSG 4326 (WGS84) 到 EPSG 3857 (Web Mercator)

  • EPSG 3857 (Web Mercator) 到 EPSG 4326 (WGS84)

对于 EPSG 4326 (WGS84),除非坐标处于以下范围内,否则转换会失败:

  • 经度限制:-572 到 +572
  • 纬度限制:-89.9999999 到 +89.9999999

行为类型

不可变

语法

ST_Transform( g1, srid )

参数

g1
GEOMETRY 类型的空间对象。
srid
要将空间对象转换到的空间参考系统标识符 (SRID),类型为 INTEGER。

返回

GEOMETRY

支持的数据类型

示例

以下示例显示了如何将数据从 Web Mercator (3857) 转换为 WGS84 (4326):

=> SELECT ST_AsText(ST_Transform(STV_GeometryPoint(7910240.56433, 5215074.23966, 3857), 4326));
        ST_AsText
-------------------------
 POINT (71.0589 42.3601)
(1 row)

以下示例显示了如何将表中的线串数据从 WGS84 (4326) 转换为 Web Mercator (3857):

=> CREATE TABLE transform_line_example (g GEOMETRY);
CREATE TABLE
=> COPY transform_line_example (gx FILLER LONG VARCHAR, g AS ST_GeomFromText(gx, 4326)) FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> LINESTRING(0 0, 1 1, 2 2, 3 4)
>> \.
=> SELECT ST_AsText(ST_Transform(g, 3857)) FROM transform_line_example;
                                                        ST_AsText
-------------------------------------------------------------------------------------------------------------------------
 LINESTRING (0 -7.08115455161e-10, 111319.490793 111325.142866, 222638.981587 222684.208506, 333958.47238 445640.109656)
(1 row)

以下示例显示了如何将表中的点数据从 WGS84 (4326) 转换为 Web Mercator (3857):

=> CREATE TABLE transform_example (x FLOAT, y FLOAT, srid INT);
CREATE TABLE
=> COPY transform_example FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 42.3601|71.0589|4326
>> 122.4194|37.7749|4326
>> 94.5786|39.0997|4326
>> \.
=> SELECT ST_AsText(ST_Transform(STV_GeometryPoint(x, y, srid), 3857)) FROM transform_example;
              ST_AsText
-------------------------------------
 POINT (4715504.76195 11422441.5961)
 POINT (13627665.2712 4547675.35434)
 POINT (10528441.5919 4735962.8206)
(3 rows)

40 - ST_Union

计算两个空间对象中所有点的联合。

该结果在数学上表示为:g1 È *g2 *

行为类型

不可变

语法

ST_Union( g1, g2 )

参数

g1
空间对象,类型为 GEOMETRY
g2
空间对象,类型为 GEOMETRY

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 ST_Union 的用法。

返回表示这两个多边形中包含的所有点的多边形:

=> SELECT ST_AsText(ST_Union(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,-1 1,0 2))'),
   ST_GeomFromText('POLYGON((-1 2, 0 0, -2 0, -1 2))')));
                                     ST_AsText
------------------------------------------------------------------------------
 POLYGON ((0 2, 1 1, 0 -1, -0.5 0, -2 0, -1 2, -0.666666666667 1.33333333333, 0 2))
(1 row)

41 - ST_Within

如果空间对象 g1 完全在空间对象 g2 内部,则 ST_Within 将返回 True。两个参数必须是相同的空间数据类型。要么指定两个 GEOMETRY 对象,要么指定两个 GEOGRAPHY 对象。

如果某个对象(例如点或线串)仅沿多边形边界存在,则 ST_Within 将返回 False。线串的内部是线串上除起点和终点以外的所有点。

ST_Within(g``g is functionally equivalent to ST_Contains(g``g.

不支持顶点或边界位于国际日期变更线 (IDL) 或南、北极的 GEOGRAPHY 多边形。

行为类型

不可变

语法

ST_Within( g1, g2
                      [USING PARAMETERS spheroid={true | false}] )

参数

g1
空间对象,类型为 GEOMETRY 或 GEOGRAPHY
g2
空间对象,类型为 GEOMETRY 或 GEOGRAPHY

参数

spheroid = {true | false}

(可选)用于指定是否使用理想球体或 WGS84 的 BOOLEAN 值。

默认值:False

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

示例

以下示例显示了 ST_Within 的用法。

第一个多边形完全包含在第二个多边形范围内:

=> SELECT ST_Within(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'),
   ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
 ST_Within
-----------
 t
(1 row)

点位于多边形顶点之上但不在其内部:

=> SELECT ST_Within (ST_GeographyFromText('POINT(30 25)'),
   ST_GeographyFromText('POLYGON((25 25,25 35,32.2 35,30 25,25 25))'));
 ST_Within
-----------
 f
(1 row)

两个多边形在空间上等效:

=> SELECT ST_Within (ST_GeomFromText('POLYGON((-1 2, 0 3, 0 1, -1 2))'),
   ST_GeomFromText('POLYGON((0 3, -1 2, 0 1, 0 3))'));
 ST_Within
-----------
 t
(1 row)

另请参阅

42 - ST_X

确定 GEOMETRY 点的 x 坐标或 GEOGRAPHY 点的经度值。

行为类型

不可变

语法

ST_X( g )

参数

g
类型为 GEOMETRY 或 GEOGRAPHY 的点

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_X 的用法。

返回 x 坐标:

=> SELECT ST_X(ST_GeomFromText('POINT(3.4 1.25)'));
 ST_X
-----
 3.4
(1 row)

返回经度值:

=> SELECT ST_X(ST_GeographyFromText('POINT(25.34 45.67)'));
 ST_X
-------
 25.34
(1 row)

43 - ST_XMax

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最大 x 坐标。

对于 GEOGRAPHY 类型,Vertica Place 将通过计算从 (MAX(longitude), ST_YMin(GEOGRAPHY)) 到 (MAX(longitude), ST_YMax(GEOGRAPHY)) 的大圆弧的最大经度来计算最大坐标。这种情况下,MAX(longitude) 是地理对象的最大经度值。

如果纬度或经度超出范围,ST_XMax 将返回地理对象的最大普通值。

行为类型

不可变

语法

ST_XMax( g )

参数

g
需要求取最大 x 坐标的空间对象,类型为 GEOMETRY 或 GEOGRAPHY。

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_XMax 的用法。

返回矩形范围内的最大 x 坐标:

=> SELECT ST_XMax(ST_GeomFromText('POLYGON((0 1,0 2,1 2,1 1,0 1))'));
  ST_XMax
-----------
     1
(1 row)

返回矩形范围内的最大经度值:

=> SELECT ST_XMax(ST_GeographyFromText(
    'POLYGON((-71.50 42.35, -71.00 42.35, -71.00 42.38, -71.50 42.38, -71.50 42.35))'));
  ST_XMax
---------
     -71
(1 row)

44 - ST_XMin

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最小 x 坐标。

对于 GEOGRAPHY 类型,Vertica Place 将通过计算从 (MIN(longitude), ST_YMin(GEOGRAPHY)) 到 (MIN(longitude), ST_YMax(GEOGRAPHY)) 的大圆弧的最小经度来计算最小坐标。这种情况下,MIN(longitude) 表示地理对象的最小经度值。

如果纬度或经度超出范围,ST_XMin 将返回地理对象的最小普通值。

行为类型

不可变

语法

ST_XMin( g )

参数

g
需要求取最小 x 坐标的空间对象,类型为 GEOMETRY 或 GEOGRAPHY。

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_XMin 的用法。

返回矩形范围内的最小 x 坐标:

=> SELECT ST_XMin(ST_GeomFromText('POLYGON((0 1,0 2,1 2,1 1,0 1))'));
  ST_XMin
----------
       0
(1 row)

返回矩形范围内的最小经度值:

=> SELECT ST_XMin(ST_GeographyFromText(
    'POLYGON((-71.50 42.35, -71.00 42.35, -71.00 42.38, -71.50 42.38, -71.50 42.35))'));
  ST_XMin
----------
    -71.5
(1 row)

45 - ST_YMax

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最大 y 坐标。

对于 GEOGRAPHY 类型,Vertica Place 将通过计算从 (ST_XMin(GEOGRAPHY), MAX(latitude)) 到 (ST_XMax(GEOGRAPHY), MAX(latitude)) 的大圆弧的最大纬度来计算最大坐标。这种情况下,MAX(latitude) 是地理对象的最大纬度值。

如果纬度或经度超出范围,ST_YMax 将返回地理对象的最大普通值。

行为类型

不可变

语法

ST_YMax( g )

参数

g
需要求取最大 y 坐标的空间对象,类型为 GEOMETRY 或 GEOGRAPHY。

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_YMax 的用法。

返回矩形范围内的最大 y 坐标:

=> SELECT ST_YMax(ST_GeomFromText('POLYGON((0 1,0 4,1 4,1 1,0 1))'));
  ST_YMax
-----------
     4
(1 row)

返回矩形范围内的最大纬度值:

=> SELECT ST_YMax(ST_GeographyFromText(
    'POLYGON((-71.50 42.35, -71.00 42.35, -71.00 42.38, -71.50 42.38, -71.50 42.35))'));
   ST_YMax
------------------
 42.3802715689979
(1 row)

46 - ST_YMin

返回 GEOMETRY 或 GEOGRAPHY 对象的最小边界矩形的最小 y 坐标。

对于 GEOGRAPHY 类型,Vertica Place 将通过计算从 (ST_XMin(GEOGRAPHY), MIN(latitude)) 到 (ST_XMax(GEOGRAPHY), MIN(latitude)) 的大圆弧的最小纬度来计算最小坐标。这种情况下,MIN(latitude) 表示地理对象的最小纬度值。

如果纬度或经度超出范围,ST_YMin 将返回地理对象的最小普通值。

行为类型

不可变

语法

ST_YMin( g )

参数

g
需要求取最小 y 坐标的空间对象,类型为 GEOMETRY 或 GEOGRAPHY。

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_YMin 的用法。

返回矩形范围内的最小 y 坐标:

=> SELECT ST_YMin(ST_GeomFromText('POLYGON((0 1,0 4,1 4,1 1,0 1))'));
  ST_YMin
-----------
     1
(1 row)

返回矩形范围内的最小纬度值:

=> SELECT ST_YMin(ST_GeographyFromText(
    'POLYGON((-71.50 42.35, -71.00 42.35, -71.00 42.38, -71.50 42.38, -71.50 42.35))'));
  ST_YMin
------------------
 42.35
(1 row)

47 - ST_Y

确定 GEOMETRY 点的 y 坐标或 GEOGRAPHY 点的纬度值。

行为类型

不可变

语法

ST_Y( g )

参数

g
类型为 GEOMETRY 或 GEOGRAPHY 的点

返回

FLOAT

支持的数据类型

示例

以下示例显示了 ST_Y 的用法。

返回 y 坐标:

=> SELECT ST_Y(ST_GeomFromText('POINT(3 5.25)'));
 ST_Y
------
 5.25
(1 row)

返回纬度值:

=> SELECT ST_Y(ST_GeographyFromText('POINT(35.44 51.04)'));
 ST_Y
-------
 51.04
(1 row)

48 - STV_AsGeoJSON

返回 Javascript 几何对象表示法 (GeoJSON) 对象形式的几何或地理参数。

行为类型

不可变

语法

STV_AsGeoJSON( g, [USING PARAMETERS maxdecimals=[dec_value]])

参数

g

GEOMETRY 或 GEOGRAPHY 类型的空间对象

maxdecimals = dec_value
(可选)整型值。确定浮点坐标小数点后输出的最大位数。

有效值 在 0 到 15 之间。

默认 **:**6

返回

LONG VARCHAR

支持的数据类型

示例

以下示例显示了 STV_AsGeoJSON 的用法。

将几何多边形转换为 GeoJSON:

=> SELECT STV_AsGeoJSON(ST_GeomFromText('POLYGON((3 2, 4 3, 5 1, 3 2), (3.5 2, 4 2.5, 4.5 1.5, 3.5 2))'));
                                            STV_AsGeoJSON
--------------------------------------------------------------------------------------------------
 {"type":"Polygon","coordinates":[[[3,2],[4,3],[5,1],[3,2]],[[3.5,2],[4,2.5],[4.5,1.5],[3.5,2]]]}
(1 row)

将地理点转换为 GeoJSON:

=> SELECT STV_AsGeoJSON(ST_GeographyFromText('POINT(42.36011 71.05899)') USING PARAMETERS maxdecimals=4);
                   STV_AsGeoJSON
-------------------------------------------------
 {"type":"Point","coordinates":[42.3601,71.059]}
(1 row)

49 - STV_Create_Index

对一组多边形创建空间索引,以加快与一组点的空间相交计算速度。

利用一个输入多边形集(可以是查询的结果),可以创建空间索引。空间索引是在全局命名空间中创建的。每当跨群集的节点对输入表或投影分段时,Vertica 会采用分布式计划。

OVER() 子句必须为空。

行为类型

不可变

语法

STV_Create_Index( gid, g
                   USING PARAMETERS index='index_name'
                                    [, overwrite={ true | false } ]
                                    [, max_mem_mb=maxmem_value]
                     [, skip_nonindexable_polygons={true | false } ] )
                 OVER()
                    [ AS (polygons, srid, min_x, min_y, max_x, max_y, info) ]

实参

gid
唯一标识多边形的 Integer 列的名称。Gid 不能为 NULL。
g
包含多边形或多边形集合的几何或地理 (WGS84) 列或表达式的名称。只能对多边形和多边形集合编制索引。将从索引中排除其他图形类型。

参数

index = 'index_name'
索引的名称,类型为 VARCHAR。索引名称不能超过 110 个字符。索引名称中不允许使用斜杠、反斜杠和制表符。
overwrite = [ true | false ]

用于指定是否覆盖索引的 BOOLEAN(如果存在索引)。此参数不能为 NULL。

默认值: False

max_mem_mb = maxmem_value
用于为 STV_Create_Index 在索引构建期间可分配的内存量指定限制(以 MB 为单位)的正整数。在多节点数据库上,它是每个节点的内存限制。默认值为 256。不要分配高于 GENERAL 资源池中的内存量的值。有关该池的详细信息,请参阅监控资源池

如果为 max_mem_mb 设置的值等于或接近节点上的最大可用内存,则可能给系统性能造成不利影响。例如,它可能导致在索引构建期间,其他查询由于等待内存资源而发生超时。

skip_nonindexable_polygons = [ true | false ]

(可选)BOOLEAN

在极少的情况下,无法对复杂多边形(例如解析度过高或包含不规则尖峰)编制索引。这些多边形被视为不可编制索引。当设置为 False 时,不可编制索引的多边形会导致创建索引失败。当设置为 True 时,可通过从索引中排除不可编制索引的多边形成功创建索引。

要审查无法编制索引的多边形,请配合参数 list_polygon 使用 STV_Describe_Index。

默认值:False

返回

polygons
已编制索引的多边形数量。
SRID
空间参照系标识符。
min_x, min_y, max_x, max_y
已编制索引的几何图形的最小边界矩形 (MBR) 的坐标。(min_x, min_y) 是西南坐标,(max_x, max_y) 是东北坐标。
info
列出从索引中排除的空间对象数量及其类型。

支持的数据类型

特权

任何有权访问 STV_*_Index 函数的用户都可以描述、重命名或删除由其他任何用户创建的索引。

建议

  • 对跨多个节点的大型多边形表进行分段。通过表分段可以并行运行索引创建操作,从而充分利用 Vertica 中的大规模并行处理 (MPP) 架构。这会显著缩短大型表的执行时间。

    对于需要构建索引的表,如果多边形总数较大,Vertica 建议对其进行分段。

  • STV_Create_Index 可能占用大量处理时间和内存。

    首次为新数据编制索引时,Vertica 建议监视内存使用情况,以确保其保持在安全限制以内。内存使用情况取决于多边形数量、顶点数量以及多边形之间的重叠量。

  • STV_Create_Index 会在开始创建索引之前尝试分配内存。如果无法分配足够的内存,函数将会失败。如果没有足够的可用内存,请尝试以下解决方案:

    • 在系统负载较小时创建索引。

    • 避免并发创建索引。

    • 尝试跨群集节点对输入表进行分段。

  • 确保您计划索引的所有多边形都是有效的多边形。STV_Create_Index 和 STV_Refresh_Index 在构建索引时不检查多边形的有效性。

    有关详细信息,请参阅创建或刷新索引之前确保多边形的有效性

限制

  • 12.0.x 版之前创建的任何索引都需要重新创建。

  • 如果 WGS84 多边形的顶点位于国际日期变更线 (IDL) 或北极和南极,则索引创建失败。

  • 索引名称中不允许使用反斜杠或制表符。

  • 索引名称不能超过 110 个字符。

  • 以下几何图形不包含在索引中:

    • 非多边形

    • 具有 NULL 标识符的几何图形

    • NULL 多边形(集合)

    • EMPTY 多边形(集合)

    • 无效多边形(集合)

  • 以下地形不包含在索引中:

    • 带孔的多边形
    • 跨越国际日期变更线的多边形
    • 覆盖北极或南极的多边形
    • 对跖多边形

使用提示

  • 要取消运行 STV_Create_Index,请使用 Ctrl + C

  • 如果 Geometry 列没有有效的多边形,STV_Create_Index 将在 vertica.log 中报告错误并停止创建索引。

  • 如果创建索引时使用了大量内存,请考虑对数据进行分段,以便并行创建索引。

示例

以下示例显示了 STV_Create_Index 的用法。

使用单个字面参数创建索引:


=> SELECT STV_Create_Index(1, ST_GeomFromText('POLYGON((0 0,0 15.2,3.9 15.2,3.9 0,0 0))')
     USING PARAMETERS index='my_polygon') OVER();
polygons  | SRID | min_x | min_y | max_x | max_y | info
----------+------+-------+-------+-------+-------+------
        1 |    0 |     0 |     0 |   3.9 |  15.2 |
(1 row)

从表创建索引:

=> CREATE TABLE pols (gid INT, geom GEOMETRY(1000));
CREATE TABLE
=> COPY pols(gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POLYGON((-31 74,8 70,8 50,-36 53,-31 74))
>> 2|POLYGON((-38 50,4 13,11 45,0 65,-38 50))
>> 3|POLYGON((10 20,15 60,20 45,46 15,10 20))
>> 4|POLYGON((5 20,9 30,20 45,36 35,5 20))
>> 5|POLYGON((12 23,9 30,20 45,36 35,37 67,45 80,50 20,12 23))
>> \.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons_1', overwrite=true,
    max_mem_mb=256) OVER() FROM pols;
 polygons | SRID | min_x | min_y | max_x | max_y | info
----------+------+-------+-------+-------+-------+------
        5 |    0 |   -38 |    13 |    50 |    80 |
(1 row)

从已分区的表并行创建索引:

=> CREATE TABLE pols (p INT, gid INT, geom GEOMETRY(1000)) SEGMENTED BY HASH(p) ALL NODES;
CREATE TABLE
=> COPY pols (p, gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|10|POLYGON((-31 74,8 70,8 50,-36 53,-31 74))
>> 1|11|POLYGON((-38 50,4 13,11 45,0 65,-38 50))
>> 3|12|POLYGON((-12 42,-12 42,27 48,14 26,-12 42))
>> \.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons', overwrite=true,
    max_mem_mb=256) OVER() FROM pols;
 polygons | SRID | min_x | min_y | max_x | max_y | info
----------+------+-------+-------+-------+-------+------
        3 |    0 |   -38 |    13 |    27 |    74 |
(1 row)

另请参阅

50 - STV_Describe_Index

检索关于包含一组多边形的索引的信息。如果没有传递任何参数,STV_Describe_Index 将返回所有已定义的索引。

OVER() 子句必须为空。

行为类型

不可变

语法

STV_Describe_Index ( [ USING PARAMETERS [index='index_name']
                                        [, list_polygons={true | false } ]] ) OVER ()

实参

index = 'index_name'
索引的名称,类型为 VARCHAR。索引名称不能超过 110 个字符。索引名称中不允许使用斜杠、反斜杠和制表符。
list_polygon
(可选)用于指定是否列出索引中的多边形的 BOOLEAN 值。索引参数必须与此参数配合使用。

返回

polygons
已编制索引的多边形数量。
SRID
空间参照系标识符。
min_x, min_y, max_x, max_y
已编制索引的几何图形的最小边界矩形 (MBR) 的坐标。(min_x, min_y) 是西南坐标,(max_x, max_y) 是东北坐标。
name
空间索引的名称。
gid
唯一标识多边形的 Integer 列的名称。Gid 不能为 NULL。
state
索引中的空间对象的状态。可能的值为:
  • INDEXED - 空间对象已成功编制索引。

  • SELF_INTERSECT -(仅限 WGS84)空间对象未编制索引,因为其一个边与自身的另一个边相交。

  • EDGE_CROSS_IDL -(仅限 WGS84)空间对象未编制索引,因为其一个边与国际日期变更线交叉。

  • EDGE_HALF_CIRCLE -(仅限 WGS84)空间对象未编制索引,因为包含两个对跖的相邻顶点。

  • NON_INDEXABLE - 空间对象无法编制索引。

geography

空间对象的熟知二进制 (WKB) 表示。

geometry

空间对象的熟知二进制 (WKB) 表示。

特权

任何有权访问 STV_*_Index 函数的用户都可以描述、重命名或删除由其他任何用户创建的索引。

限制

如果索引是使用 12.0.x 或更早版本创建的,一些功能将会要求重建索引。

示例

以下示例显示了 STV_Describe_Index 的用法。

检索关于索引的信息:

=> SELECT STV_Describe_Index (USING PARAMETERS index='my_polygons') OVER ();
   type   | polygons | SRID | min_x | min_y | max_x | max_y
----------+----------+------+-------+-------+-------+-------
 GEOMETRY |        4 |    0 |    -1 |    -1 |    12 |    12

(1 row)

返回所有已定义的索引的名称:

=> SELECT STV_Describe_Index() OVER ();
       name
------------------
MA_counties_index
my_polygons
NY_counties_index
US_States_Index
(4 rows)

返回索引中包含的多边形:

=> SELECT STV_Describe_Index(USING PARAMETERS index='my_polygons', list_polygons=TRUE) OVER ();
 gid |     state     |            geometry
-----+---------------+----------------------------------
  12 | INDEXED       | \260\000\000\000\000\000\000\ ...
  14 | INDEXED       | \200\000\000\000\000\000\000\ ...
  10 | NON_INDEXABLE | \274\000\000\000\000\000\000\ ...
  11 | INDEXED       | \260\000\000\000\000\000\000\ ...
(4 rows)

另请参阅

51 - STV_Drop_Index

删除空间索引。如果 STV_Drop_Index 找不到指定的空间索引,它将返回错误。

OVER 子句必须为空。

行为类型

不可变

语法

STV_Drop_Index( USING PARAMETERS index = 'index_name' ) OVER ()

参数

index = 'index_name'
索引的名称,类型为 VARCHAR。索引名称不能超过 110 个字符。索引名称中不允许使用斜杠、反斜杠和制表符。

示例

以下示例显示了 STV_Drop_Index 的用法。

删除索引:

=> SELECT STV_Drop_Index(USING PARAMETERS index ='my_polygons') OVER ();
 drop_index
------------
 Index dropped
(1 row)

另请参阅

52 - STV_DWithin

确定从一个空间对象的边界到另一个对象的边界的最短距离是否在指定的距离范围以内。

g1g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

行为类型

不可变

语法

STV_DWithin( g1, g2, d )

参数

g1

GEOMETRY 或 GEOGRAPHY 类型的空间对象

g2

GEOMETRY 或 GEOGRAPHY 类型的空间对象

d
表示距离的 FLOAT 类型的值。对于 GEOMETRY 对象,距离使用笛卡尔坐标单位测量。对于 GEOGRAPHY 对象,距离以米为单位测量。

返回

BOOLEAN

支持的数据类型

兼容的 GEOGRAPHY 对:

数据类型
GEOGRAPHY (Perfect Sphere)
Point-Point
Point-Linestring
Point-Polygon
Point-Multilinestring
Point-Multipolygon

示例

以下示例显示了 STV_DWithin 的用法。

两个几何图形彼此在最接近的点的距离为一个笛卡尔坐标单位:

=> SELECT STV_DWithin(ST_GeomFromText('POLYGON((-1 -1,2 2,0 1,-1 -1))'),
   ST_GeomFromText('POLYGON((4 3,2 3,4 5,4 3))'),1);
 STV_DWithin
-------------
 t
(1 row)

如果将该距离缩小为 0.99 个单位:

=> SELECT STV_DWithin(ST_GeomFromText('POLYGON((-1 -1,2 2,0 1,-1 -1))'),
   ST_GeomFromText('POLYGON((4 3,2 3,4 5,4 3))'),0.99);
 STV_DWithin
-------------
 f
(1 row)

第一个多边形将会接触到第二个多边形:

=> SELECT STV_DWithin(ST_GeomFromText('POLYGON((-1 -1,2 2,0 1,-1 -1))'),
   ST_GeomFromText('POLYGON((1 1,2 3,4 5,1 1))'),0.00001);
 STV_DWithin
-------------
 t
(1 row)

第一个多边形不在第二个多边形的 1000 米距离范围以内:

=> SELECT STV_DWithin(ST_GeomFromText('POLYGON((45.2 40,50.65 51.29,
   55.67 47.6,50 47.6,45.2 40))'),ST_GeomFromText('POLYGON((25 25,25 30,
   30 30,30 25,25 25))'), 1000);
 STV_DWithin
--------------
 t
(1 row)

53 - STV_Export2Shapefile

将数据库表或子查询中的 GEOGRAPHY 或 GEOMETRY 数据导出到 shapefile 。输出被写入使用 STV_SetExportShapefileDirectory 指定的目录。

行为类型

不可变

语法

STV_Export2Shapefile( columns USING PARAMETERS shapefile = 'shapefile-name'
   [, overwrite = boolean ]
   [, shape = 'spatial-class'] )
OVER()

参数

columns
导出到 shapefile 的列。

星号 (*) 值等同于列出 FROM 子句的所有列。

参数

shapefile
shapefile 组件名称的前缀。需要满足以下要求:
  • 必须以文件扩展名 .shp 结尾。

  • 长度限制为 128 个八位字节,例如 city-data.shp

如果要将 shapefile 保存到子目录,可通过将子目录连接到 shapefile-name 来实现,例如, visualizations/city-data.shp

您还可以将 shapefile 导出到您具有读写权限的挂载 S3 目录。使用语法 bucketname/path/filename

overwrite

用于指定是否覆盖索引的 BOOLEAN(如果存在索引)。此参数不能为 NULL。

默认值: False

shape
以下空间类之一:
  • Point

  • Polygon

  • Linestring

  • Multipoint

  • Multipolygon

  • Multilinestring

多边形和多边形集合始终为顺时针方向。

默认值: Polygon

返回

shapefile 导出目录中的三个文件,扩展名为 .shp.shx.dbf

限制

  • 如果多边形集合、线串集合或点集合仅包含一个元素,则分别被写为多边形、线或点。

  • 超过 10 个字符的列名称会被截短。

  • 不能导出空的 POINTS。

  • 会跳过所有包含 NULL 几何或地理数据的列。

  • 不支持或无效的日期将被替换为 NULL。

  • 数字值在导出时可能会损失精度。发生精度损失的原因是,.dbf 文件中的目标字段为 64 位 FLOAT 列,只能表示约 15 个有效位。

  • shapefile 的大小不能超过 4GB。如果您的 shapefile 过大,请尝试拆分数据并导出到多个 shapefile。

示例

以下示例显示了如何使用 STV_Export2Shapefile 将表 geo_data 的所有列导出到名为 city-data.shp 的 shapefile:

=> SELECT STV_Export2Shapefile(*
            USING PARAMETERS shapefile = 'visualizations/city-data.shp',
                             overwrite = true, shape = 'Point')
            OVER()
            FROM geo_data
            WHERE REVENUE > 25000;
 Rows Exported |                          File Path
---------------+--------------------------------------------------------------
       6442892 | v_geo-db_node0001: /home/geo/temp/visualizations/city-data.shp
(1 row)

54 - STV_Extent

返回一个包含所有输入数据的边界框。

在嵌套查询中使用 STV_Extent 以获得最佳结果。OVER 子句必须为空。

行为类型

不可变

语法

STV_Extent( g )

参数

g
空间对象,类型为 GEOMETRY。

返回

GEOMETRY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了如何使用 STV_Extent。

返回线串的边界框,并验证它是否是有效的多边形:

=> SELECT ST_AsText(geom) AS bounding_box, ST_IsValid(geom)
   FROM (SELECT STV_Extent(ST_GeomFromText('LineString(0 0, 1 1)')) OVER() AS geom) AS g;
            bounding_box             | ST_IsValid
-------------------------------------+------------
 POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0)) | t
(1 row)

返回表中空间对象的边界框:

=> CREATE TABLE misc_geo_shapes (id IDENTITY, geom GEOMETRY);
CREATE TABLE
=> COPY misc_geo_shapes (gx FILLER LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> POINT(-71.03 42.37)
>> LINESTRING(-71.058849 42.367501, -71.062240 42.371276, -71.067938 42.371246)
>> POLYGON((-71.066030 42.380617, -71.055827 42.376734, -71.060811 42.376011, -71.066030 42.380617))
>> \\.
=> SELECT ST_AsText(geom_col) AS bounding_box
   FROM (SELECT STV_Extent(geom) OVER() AS geom_col FROM misc_geo_shapes) AS g;
                                                   bounding_box
------------------------------------------------------------------------------------------------------------------
 POLYGON ((-71.067938 42.367501, -71.03 42.367501, -71.03 42.380617, -71.067938 42.380617, -71.067938 42.367501))
(1 row)

55 - STV_ForceLHR

更改空间对象的顶点顺序,使其遵循左手规则。

行为类型

不可变

语法

STV_ForceLHR( g, [USING PARAMETERS skip_nonreorientable_polygons={true | false} ])

参数

g
空间对象,类型为 GEOGRAPHY。
skip_nonreorientable_polygons = { true | false }

(可选)Boolean

当设置为 False 时,不可定向的多边形将会生成错误。例如,如果将 STV_ForceLHR 或 STV_Reverse 与设置为 False 的 skip_nonorientable_polygons 配合使用,则包含孔的地理多边形将会生成错误。当设置为 True 时,返回的结果将是传递给 API 的未经更改的多边形。

此实参可帮助从包含无法重新定向的多边形的表创建索引。

Vertica Place 将以下多边形视为不可定向:

  • 包含孔的多边形

  • 多边形集合

  • 包含孔的多边形集合

默认值:False

返回

GEOGRAPHY

支持的数据类型

示例

以下示例显示了 STV_ForceLHR 的用法。

将地理多边形的方向调整为左手方向:

=> SELECT ST_AsText(STV_ForceLHR(ST_GeographyFromText('Polygon((1 1, 3 1, 2 2, 1 1))')));
            ST_AsText
--------------------------------
 POLYGON ((1 1, 3 1, 2 2, 1 1))
(1 row)

通过强制执行左手方向来反转地理多边形的方向:

=> SELECT ST_AsText(STV_ForceLHR(ST_GeographyFromText('Polygon((1 1, 2 2, 3 1, 1 1))')));
           ST_AsText
--------------------------------
 POLYGON ((1 1, 3 1, 2 2, 1 1))
(1 row)

另请参阅

STV_Reverse

56 - STV_Geography

将 GEOMETRY 对象转换为 GEOGRAPHY 对象。SRID 值不影响 Vertica Place 查询的结果。

STV_Geography 在将 GEOMETRY 对象转换为 GEOGRAPHY 对象时,会将其 SRID 设为 4326。

行为类型

不可变

语法

STV_Geography( geom )

参数

geom
要转换为 GEOGRAPHY 对象的空间对象,类型为 GEOMETRY

返回

GEOGRAPHY

支持的数据类型

数据类型
GEOMETRY
Point
Multipoint
Linestring
Multilinestring
Polygon
Multipolygon
GeometryCollection

示例

以下示例显示了 STV_Geography 的用法。

要计算 GEOGRAPHY 对象的质心,请将其转换为 GEOMETRY 对象,然后转换回 GEOGRAPHY 对象:

=> CREATE TABLE geogs(g GEOGRAPHY);
CREATE TABLE
=> COPY geogs(gx filler LONG VARCHAR, geog AS ST_GeographyFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> MULTIPOINT(-108.619726 45.000284,-107.866813 45.00107,-106.363711 44.994223,-70.847746 41.205814)
>> \\.
=> SELECT ST_AsText(STV_Geography(ST_Centroid(STV_Geometry(g)))) FROM geogs;
           ST_AsText
--------------------------------
 POINT (-98.424499 44.05034775)
(1 row)

57 - STV_GeographyPoint

基于输入值,返回 GEOGRAPHY 点。

这是将原始坐标转换为 GEOGRAPHY 点的最佳方法。

行为类型

不可变

语法

STV_GeographyPoint( x, y )

参数

x
X 坐标或经度,FLOAT。
y
y 坐标或纬度,FLOAT。

返回

GEOGRAPHY

示例

以下示例显示了 STV_GeographyPoint 的用法。

返回 GEOGRAPHY 点:


=> SELECT ST_AsText(STV_GeographyPoint(-114.101588, 47.909677));
           ST_AsText
-------------------------------
 POINT (-114.101588 47.909677)
(1 row)

使用两列返回 GEOGRAPHY 点:


=> CREATE TABLE geog_data (id IDENTITY, x FLOAT, y FLOAT);
CREATE TABLE
=> COPY geog_data FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> -114.101588|47.909677
>> -111.532377|46.430753
>> \.
=> SELECT id, ST_AsText(STV_GeographyPoint(x, y)) FROM geog_data;
 id |           ST_AsText
----+-------------------------------
  1 | POINT (-114.101588 47.909677)
  2 | POINT (-111.532377 46.430753)
(2 rows)

在加载期间通过操纵数据源列来创建 GEOGRAPHY 点:

=> CREATE TABLE geog_data_load (id IDENTITY, geog GEOGRAPHY);
CREATE TABLE
=> COPY geog_data_load (lon FILLER FLOAT,
                        lat FILLER FLOAT,
                        geog AS STV_GeographyPoint(lon, lat))
   FROM 'test_coords.csv' DELIMITER ',';
 Rows Loaded
-------------
           2
(1 row)
=> SELECT id, ST_AsText(geog) FROM geog_data_load;
 id |             ST_AsText
----+------------------------------------
  1 | POINT (-75.101654451 43.363830536)
  2 | POINT (-75.106444487 43.367093798)
(2 rows)

另请参阅

STV_GeometryPoint

58 - STV_Geometry

将 GEOGRAPHY 对象转换为 GEOMETRY 对象。

SRID 值不影响 Vertica Place 查询的结果。

行为类型

不可变

语法

STV_Geometry( geog )

参数

geog
要转换为 GEOMETRY 对象的空间对象,类型为 GEOGRAPHY

返回

GEOMETRY

支持的数据类型

示例

以下示例显示了 STV_Geometry 的用法。

将 GEOGRAPHY 值转换为 GEOMETRY 值,然后将结果转换回 GEOGRAPHY 类型:

=> CREATE TABLE geogs(g GEOGRAPHY);
CREATE TABLE
=> COPY geogs(gx filler LONG VARCHAR, geog AS ST_GeographyFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> MULTIPOINT(-108.619726 45.000284,-107.866813 45.00107,-106.363711 44.994223,-70.847746 41.205814)
>> \\.
=> SELECT ST_AsText(STV_Geography(ST_Centroid(STV_Geometry(g)))) FROM geogs;
           ST_AsText
--------------------------------
 POINT (-98.424499 44.05034775)

59 - STV_GeometryPoint

基于输入值,返回 GEOMETRY 点。

这是将原始坐标转换为 GEOMETRY 点的最佳方法。

行为类型

不可变

语法

STV_GeometryPoint( x, y [, srid] )

参数

x
X 坐标或经度,FLOAT。
y
y 坐标或纬度,FLOAT。
srid
(可选)分配给点的空间参照标识符 (SRID),类型为 INTEGER。

返回

GEOMETRY

示例

以下示例显示了 STV_GeometryPoint 的用法。

返回包含 SRID 的 GEOMETRY 点:


=> SELECT ST_AsText(STV_GeometryPoint(71.148562, 42.989374, 4326));
          ST_AsText
-----------------------------
 POINT (-71.148562 42.989374)
(1 row)

使用两列返回 GEOMETRY 点:


=> CREATE TABLE geom_data (id IDENTITY, x FLOAT, y FLOAT, SRID int);
CREATE TABLE
=> COPY geom_data FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 42.36383053600048|-71.10165445099966|4326
>> 42.3670937980005|-71.10644448699964|4326
>> \\.
=> SELECT id, ST_AsText(STV_GeometryPoint(x, y, SRID)) FROM geom_data;
 id |             ST_AsText
----+------------------------------------
  1 | POINT (-71.101654451 42.363830536)
  2 | POINT (-71.106444487 42.367093798)
(2 rows)

在加载期间通过操纵数据源列来创建 GEOMETRY 点:

=> CREATE TABLE geom_data_load (id IDENTITY, geom GEOMETRY);
CREATE TABLE
=> COPY geom_data_load (lon FILLER FLOAT,
                        lat FILLER FLOAT,
                        geom AS STV_GeometryPoint(lon, lat))
   FROM 'test_coords.csv' DELIMITER ',';
 Rows Loaded
-------------
           2
(1 row)
=> SELECT id, ST_AsText(geom) FROM geom_data_load;
 id |             ST_AsText
----+------------------------------------
  1 | POINT (-75.101654451 43.363830536)
  2 | POINT (-75.106444487 43.367093798)
(2 rows)

另请参阅

STV_GeographyPoint

60 - STV_GetExportShapefileDirectory

返回导出目录的路径。

行为类型

不可变

语法

STV_GetExportShapefileDirectory( )

返回

图形文件导出目录的路径。

示例

以下示例显示了如何使用 STV_GetExportShapefileDirectory 来查询 shapefile 导出目录的路径:

=> SELECT STV_GetExportShapefileDirectory();
        STV_GetExportShapefileDirectory
-----------------------------------------------
 Shapefile export directory: [/home/user/temp]
(1 row)

61 - STV_Intersect 标量函数

将一个点或多个点与一组多边形在空间上相交。STV_Intersect 标量函数将返回与相交多边形关联的标识符。

行为类型

不可变

语法

STV_Intersect(  { g | x , y }
                  USING PARAMETERS index= 'index_name')

参数

g
包含点的几何或地理 (WGS84) 列。*g *列只能包含点几何图形或地理图形。如果该列包含其他几何或地理类型,STV_Intersect 将会终止并提示错误。
x
X 坐标或经度,FLOAT。
y
y 坐标或纬度,FLOAT。

参数

index = 'index_name'
空间索引的名称,类型为 VARCHAR。

返回

匹配多边形的标识符。如果点没有与索引中的任何多边形相交,则 STV_Intersect 标量函数将返回 NULL。

示例

以下示例显示了如何使用 STV_Intersect 标量。

使用两个浮点数,返回匹配多边形的 gid 或 NULL:

=> CREATE TABLE pols (gid INT, geom GEOMETRY(1000));
CREATE TABLE
=> COPY pols(gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POLYGON((31 74,8 70,8 50,36 53,31 74))
>> \.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons_1', overwrite=true,
                            max_mem_mb=256) OVER() FROM pols;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        1 |    0 |     8 |    50 |    36 |    74 |
(1 row)

=> SELECT STV_Intersect(12.5683, 55.6761 USING PARAMETERS index = 'my_polygons_1');
 STV_Intersect
---------------
            1
(1 row)

使用 GEOMETRY 列,返回匹配多边形的 gid 或 NULL:


=> CREATE TABLE polygons (gid INT, geom GEOMETRY(700));
CREATE TABLE
=> COPY polygons (gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POLYGON((-31 74,8 70,8 50,-36 53,-31 74))
>> 2|POLYGON((-38 50,4 13,11 45,0 65,-38 50))
>> 3|POLYGON((-18 42,-10 65,27 48,14 26,-18 42))
>> \.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons', overwrite=true,
     max_mem_mb=256) OVER() FROM polygons;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        3 |    0 |   -38 |    13 |    27 |    74 |
(1 row)

=> CREATE TABLE points (gid INT, geom GEOMETRY(700));
CREATE TABLE
=> COPY points (gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 100|POINT(-1 52)
>> 101|POINT(-20 0)
>> 102|POINT(-8 25)
>> 103|POINT(0 0)
>> 104|POINT(1 5)
>> 105|POINT(20 45)
>> 106|POINT(-20 5)
>> 107|POINT(-20 1)
>> \.
=> SELECT gid AS pt_gid, STV_Intersect(geom USING PARAMETERS index='my_polygons') AS pol_gid
       FROM points ORDER BY pt_gid;
 pt_gid | pol_gid
--------+---------
    100 |       1
    101 |
    102 |       2
    103 |
    104 |
    105 |       3
    106 |
    107 |
(8 rows)

另请参阅

62 - STV_Intersect 变换函数

将点与多边形在空间上相交。STV_Intersect 变换函数返回包含匹配的点/多边形对的元组。对于每个点,Vertica 返回一个或多个匹配的多边形。

在多个节点上并行计算 STV_Intersect 变换函数可以提高性能。要执行并行计算,请使用 OVER(PARTITION BEST) 子句。

行为类型

不可变

语法

STV_Intersect ( { gid | i }, { g | x , y }
         USING PARAMETERS index='index_name')
         OVER() AS (pt_gid, pol_gid)

参数

gid | i
用于唯一标识 gxy 的空间对象的整数列或整数。
g
包含点的几何或地理 (WGS84) 列。*g *列只能包含点几何图形或地理图形。如果该列包含其他几何或地理类型,STV_Intersect 将会终止并提示错误。
x
X 坐标或经度,FLOAT。
y
y 坐标或纬度,FLOAT。

参数

index = 'index_name'
空间索引的名称,类型为 VARCHAR。

返回

pt_gid
几何或地理点的唯一标识符,类型为 INTEGER。
pol_gid
几何或地理多边形的唯一标识符,类型为 INTEGER。

示例

以下示例显示了如何使用 STV_Intersect 变换函数。

使用两个浮点数,返回匹配的点-多边形对。

=> CREATE TABLE pols (gid INT, geom GEOMETRY(1000));
CREATE TABLE
=> COPY pols(gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POLYGON((31 74,8 70,8 50,36 53,31 74))
>> \\.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons_1', overwrite=true,
                            max_mem_mb=256) OVER() FROM pols;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        1 |    0 |     8 |    50 |    36 |    74 |
(1 row)

=> SELECT STV_Intersect(56, 12.5683, 55.6761 USING PARAMETERS index = 'my_polygons_1') OVER();
 pt_gid | pol_gid
--------+---------
     56 |       1
(1 row)

使用 GEOMETRY 列,返回匹配的点-多边形对。

=> CREATE TABLE polygons (gid int, geom GEOMETRY(700));
CREATE TABLE
=> COPY polygons (gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 10|POLYGON((5 5, 5 10, 10 10, 10 5, 5 5))
>> 11|POLYGON((0 0, 0 2, 2 2, 2 0, 0 0))
>> 12|POLYGON((1 1, 1 3, 3 3, 3 1, 1 1))
>> 14|POLYGON((-1 -1, -1 12, 12 12, 12 -1, -1 -1))
>> \\.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons', overwrite=true, max_mem_mb=256)
      OVER() FROM polygons;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        4 |    0 |    -1 |    -1 |    12 |    12 |
(1 row)

=> CREATE TABLE points (gid INT, geom GEOMETRY(700));
CREATE TABLE
=> COPY points (gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POINT(9 9)
>> 2|POINT(0 1)
>> 3|POINT(2.5 2.5)
>> 4|POINT(0 0)
>> 5|POINT(1 5)
>> 6|POINT(1.5 1.5)
>> \\.
=> SELECT STV_Intersect(gid, geom USING PARAMETERS index='my_polygons') OVER (PARTITION BEST)
     AS (point_id, polygon_gid)
        FROM points;
 point_id | polygon_gid
----------+-------------
        5 |          14
        1 |          14
        1 |          10
        4 |          14
        4 |          11
        6 |          12
        6 |          14
        6 |          11
        2 |          14
        2 |          11
        3 |          12
        3 |          14
(12 rows)

可通过在 WHERE 子句中使用 STV_Intersect 变换函数来提高查询性能。由于此语法会消除未与索引中的多边形相交的点,因此能够提高性能。

返回与 gid = 14 的多边形相交的点计数:

=> SELECT COUNT(pt_id) FROM
    (SELECT STV_Intersect(gid, geom USING PARAMETERS index='my_polygons')
     OVER (PARTITION BEST) AS (pt_id, pol_id) FROM points)
        AS T WHERE pol_id = 14;
 COUNT
-------
     6
(1 row)

另请参阅

63 - STV_IsValidReason

确定空间对象的格式是否正确或其是否有效。如果对象无效,STV_IsValidReason 将返回说明无效性原因的字符串。

如果以下所有项均成立,则多边形或多边形集合是有效的:

  • 多边形是封闭的;其起点与终点相同。

  • 其边界是一组线串。

  • 边界不触及或穿越本身。

  • 与外部多边形边界的接触点不超过一个的任何内部多边形。

如果将无效的对象传递给 Vertica Place 函数,函数将会失败或返回错误的结果。要确定多边形是否有效,请先运行 ST_IsValid。如果多边形有效,ST_IsValid 将返回 TRUE,否则将返回 FALSE。

行为类型

不可变

语法

STV_IsValidReason( g )

参数

g
用于测试有效性的地理空间对象,其值类型为 GEOMETRY 或 GEOGRAPHY (WGS84)。

返回

LONG VARCHAR

支持的数据类型

示例

以下示例显示了 STV_IsValidReason 的用法。

返回描述多边形无效位置的字符串:

=> SELECT STV_IsValidReason(ST_GeomFromText('POLYGON((1 3,3 2,1 1,
   3 0,1 0,1 3))'));
               STV_IsValidReason
-----------------------------------------------
 Ring Self-intersection at or near POINT (1 1)
(1 row)

另请参阅

ST_IsValid

64 - STV_LineStringPoint

检索线串或线串集合的顶点。 根据输入对象的类型,返回的值为 GEOMETRY 或 GEOGRAPHY 类型的点。GEOMETRY 点将继承输入对象的 SRID。

STV_LineStringPoint 为分析函数。有关详细信息,请参阅分析函数

行为类型

不可变

语法

STV_LineStringPoint( g )
    OVER( [PARTITION NODES] ) AS

参数

g
线串或线串集合,GEOMETRY 或 GEOGRAPHY 类型的值

返回

GEOMETRY 或 GEOGRAPHY

支持的数据类型

示例

以下示例显示了 STV_LineStringPoint 的用法。

返回几何线串的顶点及其 SRID:

=> SELECT ST_AsText(Point), ST_SRID(Point)
     FROM (SELECT STV_LineStringPoint(
           ST_GeomFromText('MULTILINESTRING((1 2, 2 3, 3 1, 4 2),
                  (10 20, 20 30, 30 10, 40 20))', 4269)) OVER () AS Point) AS foo;
    ST_AsText   | ST_SRID
 ---------------+---------
  POINT (1 2)   |    4269
  POINT (2 3)   |    4269
  POINT (3 1)   |    4269
  POINT (4 2)   |    4269
  POINT (10 20) |    4269
  POINT (20 30) |    4269
  POINT (30 10) |    4269
  POINT (40 20) |    4269
 (8 rows)

返回地理线串的顶点:


=> SELECT ST_AsText(g)
     FROM (SELECT STV_LineStringPoint(
       ST_GeographyFromText('MULTILINESTRING ((42.1 71.0, 41.4 70.0, 41.3 72.9),
           (42.99 71.46, 44.47 73.21)', 4269)) OVER () AS g) AS line_geog_points;
      ST_AsText
---------------------
 POINT (42.1 71.0)
 POINT (41.4 70.0)
 POINT (41.3 72.9)
 POINT (42.99 71.46)
 POINT (44.47 73.21)
(5 rows)

另请参阅

STV_PolygonPoint

65 - STV_MemSize

返回 INTEGER 类型的空间对象长度(以字节为单位)。

使用此函数确定空间数据的最优列宽。

行为类型

不可变

语法

STV_MemSize( g )

参数

g
空间对象,类型为 GEOMETRY 或 GEOGRAPHY 的值

返回

INTEGER

示例

以下示例显示了如何通过将 GEOMETRY 或 GEOGRAPHY 列大小调整为 STV_MemSize 所返回的最大值来对表进行优化:

=> CREATE TABLE mem_size_table (id int, geom geometry(800));
CREATE TABLE
=> COPY mem_size_table (id, gx filler LONG VARCHAR, geom as ST_GeomFromText(gx)) FROM STDIN DELIMITER '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>>1|POINT(3 5)
>>2|MULTILINESTRING((1 5, 2 4, 5 3, 6 6),(3 5, 3 7))
>>3|MULTIPOLYGON(((2 6, 2 9, 6 9, 7 7, 4 6, 2 6)),((0 0, 0 5, 1 0, 0 0)),((0 2, 2 5, 4 5, 0 2)))
>>\\.
=> SELECT max(STV_MemSize(geom)) FROM mem_size_table;
 max
-----
 336
(1 row)

=> CREATE TABLE production_table(id int, geom geometry(336));
CREATE TABLE
=> INSERT INTO production_table SELECT * FROM mem_size_table;
 OUTPUT
--------
      3
(1 row)
=> DROP mem_size_table;
DROP TABLE

66 - STV_NN

计算空间对象与参考对象之间的距离,并按照与参考对象的距离,以升序方式返回(对象,距离)对。

g1g2 参数必须都是 GEOMETRY 对象或都是 GEOGRAPHY 对象。

STV_NN 为分析函数。有关详细信息,请参阅分析函数

行为类型

不可变

语法

STV_NN( g, ref_obj, k ) OVER()

参数

g
空间对象,类型为 GEOMETRY 或 GEOGRAPHY 的值
ref_obj
参考对象,类型为 GEOMETRY 或 GEOGRAPHY
k
返回的行数,类型为 INTEGER

返回

按距离以升序方式返回(对象,距离)对。如果某个参数为 EMPTY 或 NULL,则返回 0 行。

支持的数据类型

示例

以下示例显示了 STV_NN 的用法。

创建表并插入 9 个 GEOGRAPHY 点:

=> CREATE TABLE points (g geography);
CREATE TABLE
=> COPY points (gx filler LONG VARCHAR, g AS ST_GeographyFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> POINT (21.5 18.4)
>> POINT (21.5 19.2)
>> POINT (21.5 20.7)
>> POINT (22.5 16.4)
>> POINT (22.5 17.15)
>> POINT (22.5 18.33)
>> POINT (23.5 13.68)
>> POINT (23.5 15.9)
>> POINT (23.5 18.4)
>> \\.

计算表 points 中的对象与 GEOGRAPHY 点 (23.5, 20) 的距离(以米为单位)。

返回与该点距离最近的 5 个对象:

=> SELECT ST_AsText(nn), dist FROM (SELECT STV_NN(g,
   ST_GeographyFromText('POINT(23.5 20)'),5) OVER() AS (nn,dist) FROM points) AS example;
     ST_AsText      |       dist
--------------------+------------------
 POINT (23.5 18.4)  |  177912.12757541
 POINT (22.5 18.33) | 213339.210738322
 POINT (21.5 20.7)  |  222561.43679943
 POINT (21.5 19.2)  | 227604.371833335
 POINT (21.5 18.4)  | 275239.416790128
(5 rows)

67 - STV_PolygonPoint

将多边形的顶点作为个别点进行检索。 根据输入对象的类型,返回的值为 GEOMETRY 或 GEOGRAPHY 类型的点。GEOMETRY 点将继承输入对象的 SRID。

STV_PolygonPoint 为分析函数。有关详细信息,请参阅分析函数

行为类型

不可变

语法

STV_PolygonPoint( g )
    OVER( [PARTITION NODES] ) AS

参数

g
多边形,GEOMETRY 或 GEOGRAPHY 类型的值

返回

GEOMETRY 或 GEOGRAPHY

支持的数据类型

示例

以下示例显示了 STV_PolygonPoint 的用法。

返回几何多边形的顶点:


=> SELECT ST_AsText(g) FROM (SELECT STV_PolygonPoint(ST_GeomFromText('POLYGON((1 2, 2 3, 3 1, 1 2))'))
     OVER (PARTITION NODES) AS g) AS poly_points;
  ST_AsText
-------------
 POINT (1 2)
 POINT (2 3)
 POINT (3 1)
 POINT (1 2)
(4 rows)

返回地理多边形的顶点:


=> SELECT ST_AsText(g) FROM (SELECT STV_PolygonPoint(ST_GeographyFromText('
              POLYGON((25.5 28.76, 28.83 29.13, 27.2 30.99, 25.5 28.76))'))
   OVER (PARTITION NODES) AS g) AS poly_points;
      ST_AsText
---------------------
 POINT (25.5 28.76)
 POINT (28.83 29.13)
 POINT (27.2 30.99)
 POINT (25.5 28.76)
(4 rows)

另请参阅

STV_LineStringPoint

68 - STV_Reverse

反转空间对象顶点的顺序。

行为类型

不可变

语法

STV_Reverse( g, [USING PARAMETERS skip_nonreorientable_polygons={true | false} ])

参数

g
空间对象,类型为 GEOGRAPHY。
skip_nonreorientable_polygons = { true | false }

(可选)Boolean

当设置为 False 时,不可定向的多边形将会生成错误。例如,如果将 STV_ForceLHR 或 STV_Reverse 与设置为 False 的 skip_nonorientable_polygons 配合使用,则包含孔的地理多边形将会生成错误。当设置为 True 时,返回的结果将是传递给 API 的未经更改的多边形。

此实参可帮助从包含无法重新定向的多边形的表创建索引。

Vertica Place 将以下多边形视为不可定向:

  • 包含孔的多边形

  • 多边形集合

  • 包含孔的多边形集合

默认值:False

返回

GEOGRAPHY

支持的数据类型

示例

以下示例显示了 STV_Reverse 的用法。

反转地理多边形的顶点:

=> SELECT ST_AsText(STV_Reverse(ST_GeographyFromText('Polygon((1 1, 3 1, 2 2, 1 1))')));
            ST_AsText
--------------------------------
 POLYGON ((1 1, 2 2, 3 1, 1 1))
(1 row)

强制多边形反转方向:

=> SELECT ST_AsText(STV_Reverse(ST_GeographyFromText('Polygon((1 1, 2 2, 3 1, 1 1))')));
ST_AsText
--------------------------------
 POLYGON ((1 1, 3 1, 2 2, 1 1))
(1 row)

另请参阅

STV_ForceLHR

69 - STV_Rename_Index

为空间索引重命名。如果索引格式过期,则不能为索引重命名。

利用一个输入多边形集(可以是查询的结果),可以创建空间索引。空间索引是在全局命名空间中创建的。每当跨群集的节点对输入表或投影分段时,Vertica 会采用分布式计划。

OVER() 子句必须为空。

行为类型

不可变

语法

STV_Rename_Index( USING PARAMETERS
                  source = 'old_index_name',
                  dest = 'new_index_name',
                  overwrite = [ 'true' | 'false' ]
                )
                 OVER ()

参数

source = 'old_index_name'
空间索引的当前名称,类型为 VARCHAR。
dest = 'new_index_name'
空间索引的新名称,类型为 VARCHAR。
overwrite = [ 'true' | 'false' ]

用于指定是否覆盖索引的 BOOLEAN(如果存在索引)。此参数不能为 NULL。

默认值: False

特权

任何有权访问 STV_*_Index 函数的用户都可以描述、重命名或删除由其他任何用户创建的索引。

限制

  • 索引名称不能超过 110 个字符。

  • 索引名称中不允许使用反斜杠或制表符。

示例

以下示例显示了 STV_Rename_Index 的用法。

为索引重命名:

=> SELECT STV_Rename_Index (
       USING PARAMETERS
       source = 'my_polygons',
       dest = 'US_states',
       overwrite = 'false'
       )
       OVER ();
 rename_index
---------------
 Index renamed
(1 Row)

70 - STV_Refresh_Index

将新添加或更新的多边形追加到现有的空间索引,以及从现有的空间索引中移除已删除的多边形。

OVER() 子句必须为空。

行为类型

可变

语法

STV_Refresh_Index( gid, g
                   USING PARAMETERS index='index_name'
                    [, skip_nonindexable_polygons={ true | false } ] )

                 OVER()
                    [ AS (type, polygons, srid, min_x, min_y, max_x, max_y, info,
               indexed, appended, updated, deleted) ]

参数

gid
唯一标识多边形的 Integer 列的名称。Gid 不能为 NULL。
g
包含多边形或多边形集合的几何或地理 (WGS84) 列或表达式的名称。只能对多边形和多边形集合编制索引。将从索引中排除其他图形类型。

参数

index = 'index_name'
索引的名称,类型为 VARCHAR。索引名称不能超过 110 个字符。索引名称中不允许使用斜杠、反斜杠和制表符。
skip_nonindexable_polygons = { true | false }

(可选)BOOLEAN

在极少的情况下,无法对复杂多边形(例如解析度过高或包含不规则尖峰)编制索引。这些多边形被视为不可编制索引。当设置为 False 时,不可编制索引的多边形会导致创建索引失败。当设置为 True 时,可通过从索引中排除不可编制索引的多边形成功创建索引。

要审查无法编制索引的多边形,请配合参数 list_polygon 使用 STV_Describe_Index。

默认值:False

返回

type
索引的空间对象类型。
polygons
已编制索引的多边形数量。
SRID
空间参照系标识符。
min_x, min_y, max_x, max_y
已编制索引的几何图形的最小边界矩形 (MBR) 的坐标。(min_x, min_y) 是西南坐标,(max_x, max_y) 是东北坐标。
info
列出从索引中排除的空间对象数量及其类型。
indexed
在操作期间编制索引的多边形数量。
appended
追加的多边形数量。
updated
更新的多边形数量。
deleted
删除的多边形数量。

支持的数据类型

特权

任何有权访问 STV_*_Index 函数的用户都可以描述、重命名或删除由其他任何用户创建的索引。

限制

  • 在极少的情况下,无法对复杂多边形(例如解析度过高或包含不规则尖峰)编制索引。请参见参数 skip_nonindexable_polygons

  • 如果将源表中的有效多边形替换为无效的多边形,STV_Refresh_Index 将会忽略无效的多边形。因此,原来已编制索引的多边形仍保留在索引中。

  • 无法索引以下几何图形:

    • 非多边形

    • NULL gid

    • NULL 多边形(集合)

    • EMPTY 多边形(集合)

    • 无效多边形(集合)

  • 以下地形不包含在索引中:

    • 带孔的多边形
    • 跨越国际日期变更线的多边形
    • 覆盖北极或南极的多边形
    • 对跖多边形

使用提示

  • 要取消运行 STV_Refresh_Index,请使用 Ctrl + C

  • 如果使用之前没有与索引关联的源数据,则会覆盖索引。

  • 如果 STV_Refresh_Index 没有足够的内存处理该查询,则将使用 STV_Create_Index 重建索引。

  • 如果 Geometry 列没有有效的多边形,STV_Refresh_Index 将在 vertica.log 中报告错误并停止刷新索引。

  • 确保您计划索引的所有多边形都是有效的多边形。STV_Create_Index 和 STV_Refresh_Index 在构建索引时不检查多边形的有效性。

    有关详细信息,请参阅创建或刷新索引之前确保多边形的有效性

示例

以下示例显示了 STV_Refresh_Index 的用法。

使用单个字面参数刷新索引:

=> SELECT STV_Create_Index(1, ST_GeomFromText('POLYGON((0 0,0 15.2,3.9 15.2,3.9 0,0 0))')
     USING PARAMETERS index='my_polygon') OVER();
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        1 |    0 |     0 |     0 |   3.9 |  15.2 |
(1 row)

=> SELECT STV_Refresh_Index(2, ST_GeomFromText('POLYGON((0 0,0 13.2,3.9 18.2,3.9 0,0 0))')
     USING PARAMETERS index='my_polygon') OVER();
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info | indexed | appended | updated | deleted
----------+----------+------+-------+-------+-------+-------+------+---------+----------+---------+---------
 GEOMETRY |        1 |    0 |     0 |     0 |   3.9 |  18.2 |      |       1 |        1 |       0 |       1
(1 row)

刷新表索引:

=> CREATE TABLE pols (gid INT, geom GEOMETRY);
CREATE TABLE
=> COPY pols(gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1|POLYGON((-31 74,8 70,8 50,-36 53,-31 74))
>> 2|POLYGON((5 20,9 30,20 45,36 35,5 20))
>> 3|POLYGON((12 23,9 30,20 45,36 35,37 67,45 80,50 20,12 23))
>> \\.
=> SELECT STV_Create_Index(gid, geom USING PARAMETERS index='my_polygons_1', overwrite=true)
     OVER() FROM pols;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info
----------+----------+------+-------+-------+-------+-------+------
 GEOMETRY |        3 |    0 |   -36 |    20 |    50 |    80 |
(1 row)

=> COPY pols(gid, gx filler LONG VARCHAR, geom AS ST_GeomFromText(gx)) FROM stdin delimiter '|';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 6|POLYGON((-32 74,8 70,8 50,-36 53,-32 74))
>> \\.
=> SELECT STV_Refresh_Index(gid, geom USING PARAMETERS index='my_polygons_1') OVER() FROM pols;
   type   | polygons | SRID | min_x | min_y | max_x | max_y | info | indexed | appended | updated | deleted
----------+----------+------+-------+-------+-------+-------+------+---------+----------+---------+---------
 GEOMETRY |        4 |    0 |   -36 |    20 |    50 |    80 |      |       1 |        1 |       0 |       0
(1 row)

另请参阅

71 - STV_SetExportShapefileDirectory

指定将 GEOMETRY 或 GEOGRAPHY 数据导出到 shapefile 的目录。不检查路径的有效性,并且路径不能为空。

行为类型

不可变

语法

STV_SetExportShapefileDirectory( USING PARAMETERS path='shapefile_path' )

参数

path = ' shapefile_path '
需要将 shapefile 导出到的路径。例如“/home/user/temp”。您还可以使用约定“<bucketname>/path”导出到您具有读写权限的挂载 S3 目录。

返回

图形文件导出目录的路径。

特权

只有 超级用户才能使用此函数。

示例

以下示例显示了如何使用 STV_SetExportShapefileDirectory 将 shapefile 导出目录设为 /home/user/temp:

=> SELECT STV_SetExportShapefileDirectory(USING PARAMETERS path = '/home/user/temp');
              STV_SetExportShapefileDirectory
------------------------------------------------------------
 SUCCESS. Set shapefile export directory: [/home/user/temp]
(1 row)

72 - STV_ShpSource 和 STV_ShpParser

这两个函数与 COPY 配合使用,解析 shapefile 中的几何图形和属性并将其加载到 Vertica 表,然后转换为适当的 GEOMETRY 数据类型。必须将这两个函数一起使用。

存在以下限制:

  • 无法从 shapefile 加载空的点集合或无效的多边形集合。

  • 如果 shapefile 的 .dbf 组件包含数字属性,则在 Vertica Place shapefile 加载程序将此字段加载到表中时,此字段的值可能会损失精度。因为目标字段为 64 位 FLOAT 列,只能表示约 15 个有效位;而在 .dbf 文件中,数字字段最多可达 30 位。

被拒绝的记录保存在 Vertica 编录目录下的 CopyErrorLogs 子目录。

行为类型

不可变

语法

COPY table( columnslist )
     WITH SOURCE STV_ShpSource
          ( file = 'filename'[[, SRID=spatial‑reference‑identifier] [, flatten_2d={true | false }] ] )
     PARSER STV_ShpParser()

参数

向其中加载几何数据的表名称。
columnslist
表中与外部文件中的字段相匹配的列名称的逗号分隔列表。运行 STV_ShpCreateTable 创建的 CREATE TABLE 命令。执行此操作时,这些列将对应第二列到倒数第二列。
file = 'pathname'
指定 .dbf.shp.shx 文件的完全限定路径。

您还可以从存储在您具有读取和写入权限的挂载 S3 目录中的 shapefile 加载。在这种情况下,请使用以下语法:

bucketname/path/filename
SRID=spatial‑reference‑identifier
指定与形状文件关联的整数空间参照标识符 (SRID)。
flatten_2d
指定在 COPY 命令期间排除 3D 或 4D 坐标的 BOOLEAN 实参:
  • true:在 COPY 命令之前排除具有 3D 或 4D 坐标的几何图形。

  • false:如果找到具有 3D 或 4D 坐标的几何图形,则会导致加载失败。

默认值: false

特权

  • 源 shapefile:读取

  • shapefile 目录:执行

COPY 错误

COPY 命令在以下任一情况下会失败:

  • 找不到或无法打开 shapefile。

  • STV_ShpParser 创建的列数或列数据类型与目标表中的列不匹配。使用 STV_ShpCreateTable 生成相应的 CREATE TABLE 命令。

  • 缺失或无法打开其中一个必要文件。打开 shapefile 时,您必须拥有三个文件:.dbf.shp.shx

STV_ShpSource 文件损坏处理

  • 如果 .shp.shx 文件已损坏,STV_ShpSource 将返回错误。

  • 如果 .shp.shx 文件有效,但 .dbf 文件已损坏,STV_ShpSource 将忽略 .dbf 文件并且不创建该数据对应的列。

示例


=> COPY tl_2010_us_state10 WITH SOURCE
STV_ShpSource(file='/shapefiles/tl_2010_us_state10.shp', SRID=4269) PARSER STV_ShpParser();

 Rows loaded
-------------
          52

73 - STV_ShpCreateTable

返回包含在指定的 shapefile 中找到的属性列和类型的 CREATE TABLE 语句。

列类型将根据 shapefile 元数据调整大小。列大小基于在 shapefile 中找到的最大几何图形。表中的第一列是 gid,它是自动递增的 IDENTITY 主关键字列。缓存值默认设为 64。最后一列是用于存储实际几何数据的 GEOMETRY 数据类型。

行为类型

不可变

语法

STV_ShpCreateTable (USING PARAMETERS file='filename') OVER()

参数

file = 'filename'
.dbf.shp.shx 文件的完全限定路径(文件扩展名可选)。

您还可以使用存储在您具有读取和写入权限的挂载 S3 目录中的 shapefile 创建表。使用以下语法:

bucketname/path/filename

返回

与指定的 shapefile 相匹配的 CREATE TABLE 语句

使用提示

  • STV_ShpCreateTable 会返回 CREATE TABLE 语句;但它不会创建表。根据需要修改 CREATE TABLE 语句,在将 shapefile 加载到表中之前创建该表。

  • 要使用字母数字和下划线 (_) 字符之外的其他字符创建表,必须指定双引号括起的表名称,例如"counties%NY"

  • 表名称与 shapefile 的名称相同(不包括目录名称或扩展名)。

  • 必须可以从启动节点访问 shapefile。

  • 如果 .shp 和 .shx 文件已损坏,STV_ShpCreateTable 将返回错误。如果 .shp 和 .shx 文件有效,但 .dbf 文件已损坏,STV_ShpCreateTable 将忽略 .dbf 文件并且不创建该数据对应的列。

  • 所有必要文件(.dbf.shp.shx)必须在同一个目录中。否则,STV_ShpCreateTable 将会返回错误。

  • 如果 shapefile 的 .dbf 组件包含数字属性,则在 Vertica shapefile 加载程序将此字段加载到表中时,此字段的值可能会损失精度。因为目标字段为 64 位 FLOAT 列,只能表示约 15 个有效位。而在 .dbf 文件中,数字字段最多可达 30 位。

    Vertica 会在 vertica.log 文件中记录所有太长的 shapefile 值实例。

示例

以下示例显示了 STV_ShpCreateTable 的用法。

返回 CREATE TABLE 语句:


=> SELECT STV_ShpCreateTable
      (USING PARAMETERS file='/shapefiles/tl_2010_us_state10.shp')
      OVER() as create_table_states;
      create_table_states
 ----------------------------------
CREATE TABLE tl_2010_us_state10(
   gid IDENTITY(64) PRIMARY KEY,
   REGION10 VARCHAR(2),
   DIVISION10 VARCHAR(2),
   STATEFP10 VARCHAR(2),
   STATENS10 VARCHAR(8),
   GEOID10 VARCHAR(2),
   STUSPS10 VARCHAR(2),
   NAME10 VARCHAR(100),
   LSAD10 VARCHAR(2),
   MTFCC10 VARCHAR(5),
   FUNCSTAT10 VARCHAR(1),
   ALAND10 INT8,
   AWATER10 INT8,
   INTPTLAT10 VARCHAR(11),
   INTPTLON10 VARCHAR(12),
   geom GEOMETRY(940845)
);
(18 rows)

另请参阅