构造函数可根据熟知的文本描述或另一数据格式(如熟知的二进制格式或 shapefile)创建几何。
在提供熟知文本描述以构造几何时,必须在最后指定测量坐标。例如,如果文本中含有 x、y、z 和 m 坐标,则必须按此顺序提供,不能按 x、y、m、z 的顺序提供。
几何可以有零个或更多个点。如果几何有零个点,则其被视为空几何。点子类型是唯一的一种限制为零个点或一个点的几何;其他所有子类型都可有零个或更多个点。
以下各部分将介绍几何超类和子类几何,还列出了可以构造每种几何的函数。
几何超类
ST_Geometry 超类不能实例化;尽管您可以定义一个类型为 ST_Geometry 的列,但插入的实际数据将被定义为点、线串、面、多点、多线串或多面实体。
可以使用以下函数来创建超类,用于保存前面提到的任何实体类型。
- ST_Geometry
- ST_GeomFromText(仅限 Oracle 和 SQLite)
- ST_GeomFromWKB
子类
您可以将一个要素定义为具体子类,在这种情况下,只能插入该子类允许的实体类型。例如,ST_PointFromWKB 只能构造点实体。
ST_Point
ST_Point 是零维度几何,它在坐标空间中占据单个位置。ST_Point 具有单个 x,y 坐标值(始终是简单的),并且边界为空。ST_Point 可以用来定义诸如油井、地标和水样采集点等要素。
创建点的函数如下所示:
- ST_Point
- ST_PointFromText(仅限 Oracle 和 SQLite)
- ST_PointFromWKB
ST_MultiPoint
ST_MultiPoint 是 ST_Point 的集合,并且其维度为 0,与其元素相同。如果 ST_MultiPoint 中的元素占据的坐标空间互不相同,则它是简单的。ST_MultiPoint 的边界为 NULL。ST_MultiPoint 可以定义诸如天线广播模式和疾病爆发事件等。
创建多点几何的函数如下所示:
ST_LineString
ST_LineString 是一维对象,它以点序列的形式进行存储,用于定义线性插值路径。如果 ST_LineString 不与其内部相交,则 ST_LineString 是简单的。闭合的 ST_LineString 的端点(边界)占据空间中的相同点。如果 ST_LineString 是闭合的并且是简单的,那么它是一个环。与从超类 ST_Geometry 继承的其他属性一样,ST_LineString 具有长度属性。ST_LineString 通常用于定义线状要素,如道路、河流和电力线。
端点通常形成 ST_LineString 的边界,除非 ST_LineString 是闭合的(在这种情况下边界为 NULL)。ST_LineString 的内部是端点之间的连通路径,除非它是闭合的(在这种情况下内部是连续的)。
创建线串的函数包括:
- ST_LineString
- ST_LineFromText(仅限 Oracle 和 SQLite)
- ST_LineFromWKB
- ST_Curve(仅限 Oracle 和 SQLite)
ST_MultiLineString
ST_MultiLineString 是若干 ST_LineString 的集合。
ST_MultiLineString 的边界是 ST_LineString 元素的非相交端点。如果 ST_MultiLineString 的所有元素的所有端点都相交,则它的边界为 NULL。ST_MultiLineString 不仅具有从超类 ST_Geometry 继承的其他属性,还具有长度属性。ST_MultiLineString 用于定义不毗连的线状要素,如河流或道路网络。
构造多线串的函数如下所示:
- ST_MultiLineString
- ST_MLineFromText(仅限 Oracle 和 SQLite)
- ST_MLineFromWKB
- ST_MultiCurve(仅限 Oracle)
ST_Polygon
ST_Polygon 是二维表面,它以点序列的形式存储,用于定义其外接环以及 0 个或更多内部环。ST_Polygon 始终是简单的。ST_Polygon 用于定义具有空间范围的要素,例如地块、水体以及管辖区。
下图显示了 ST_Polygon 对象的示例:(1) 是边界由外部环定义的 ST_Polygon。(2) 是边界由外部环和两个内部环定义的 ST_Polygon。内部环内的区域是 ST_Polygon 外部环的一部分。(3) 是有效 ST_Polygon,因为环之间相切。
外部环和任意内部环确定了 ST_Polygon 的边界,环之间的封闭空间确定了 ST_Polygon 的内部。ST_Polygon 的环可以相切,但绝不可以相交。ST_Polygon 不仅具有从超类 ST_Geometry 继承的其他属性,还具有面积属性。
创建面的函数包括:
- ST_Polygon
- ST_PolyFromText(仅限 Oracle 和 SQLite)
- ST_PolyFromWKB
- ST_Surface(仅限 Oracle 和 SQLite)
ST_MultiPolygon
ST_MultiPolygon 的边界是其元素外部环和内部环的累积长度。ST_MultiPolygon 的内部被定义为其 ST_Polygon 元素的累积内部。ST_MultiPolygon 的元素的边界只能相切。ST_MultiPolygon 不仅具有从超类 ST_Geometry 继承的其他属性,还具有面积属性。ST_MultiPolygon 用于定义诸如森林地层或不毗连的地块(如太平洋岛链)等要素。
下图提供了 ST_MultiPolygon 的示例:(1) 是具有两个 ST_Polygon 元素的 ST_MultiPolygon。边界由两个外部环和三个内部环定义。(2) 是具有两个 ST_Polygon 元素的 ST_MultiPolygon。边界由两个外部环和两个内部环定义。两个 ST_Polygon 元素相切。
创建多面的函数如下所示:
- ST_MultiPolygon
- ST_MPolyFromText(仅限 Oracle 和 SQLite)
- ST_MPolyFromWKB
- ST_MultiSurface(仅限 Oracle)