ST_Geometry 的构造函数
构造函数可根据熟知的文本描述或另一数据格式(如熟知的二进制格式或 shapefile)创建几何。
几何可以有零个或更多个点。如果几何有零个点,则其被视为空几何。点子类型是唯一的一种限制为零个点或一个点的几何;其他所有子类型都可有零个或更多个点。
以下各部分将介绍几何超类和子类几何,还列出了可以构造每种几何的函数。
几何超类
ST_Geometry 超类不能实例化;尽管您可以定义一个类型为 ST_Geometry 的列,但插入的实际数据将被定义为点、线串、面、多线串或多面实体。
可以使用以下函数来创建超类,用于保存前面提到的任何实体类型。
- ST_Geometry
- ST_GeomFromShape(仅 PostgreSQL)
- ST_GeomFromText(仅 Oracle)
- ST_GeomFromWKB
子类
您可以将一个要素定义为具体子类,在这种情况下,只能插入该子类允许的实体类型。例如,ST_PointFromWKB 只能构造点实体。
ST_Point
ST_Point 是零维度几何,它在坐标空间中占据单个位置。ST_Point 具有单个 x,y 坐标值(始终是简单的),并且边界为空。ST_Point 可以用来定义诸如油井、地标和水样采集点等要素。
创建点的函数如下所示:
- ST_Point
- ST_PointFromShape(仅 PostgreSQL)
- ST_PointFromText(仅 Oracle)
- ST_PointFromWKB
ST_MultiPoint
ST_MultiPoint 是 ST_Point 的集合;ST_MultiPoint 的维度为 0,与其元素相同。如果 ST_MultiPoint 中的元素均没有占据相同的坐标空间,则它是简单的。ST_MultiPoint 的边界为空。ST_MultiPoint 可以定义诸如天线广播模式和疾病爆发事件等。
创建多点几何的函数如下所示:
- ST_MultiPoint
- ST_MPointFromShape(仅 PostgreSQL)
- ST_MPointFromText(仅 Oracle)
- ST_MPointFromWKB
ST_LineString
ST_LineString 是一维对象,它以用于定义线性插值路径的点序列的形式进行存储。如果 ST_LineString 不与其内部相交,则 ST_LineString 很简单。闭合的 ST_LineString 的端点(边界)占据空间中的相同点。如果 ST_LineString 是闭合的并且是简单的,那么它是一个环。与从超类 ST_Geometry 继承的其他属性一样,ST_LineString 具有长度。ST_LineString 通常用于定义线状要素,如道路、河流和电力线。
端点通常形成 ST_LineString 的边界,除非 ST_LineString 是闭合的(在这种情况下边界为空)。ST_LineString 的内部是端点之间的连通路径,除非它是闭合的(在这种情况下内部是连续的)。
创建线串的函数包括:
- ST_LineString
- ST_LineFromShape(仅 PostgreSQL)
- ST_LineFromText(仅 Oracle)
- ST_LineFromWKB
- ST_Curve(仅 Oracle)
ST_MultiLineString
ST_MultiLineString 是若干 ST_LineString 的集合。
ST_MultiLineString 的边界是 ST_LineString 元素的非相交端点。如果 ST_MultiLineString 的所有元素的所有端点都相交,则它的边界为空。ST_MultiLineString 不仅具有从超类 ST_Geometry 继承的其他属性,还具有长度。ST_MultiLineString 用于定义不毗连的线状要素,如河流或道路网络。
构造多线串的函数如下所示:
- ST_MultiLineString
- ST_MLineFromShape(仅 PostgreSQL)
- ST_MLineFromText(仅 Oracle)
- 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_PolyFromShape(仅 PostgreSQL)
- ST_PolyFromText(仅 Oracle)
- ST_PolyFromWKB
- ST_Surface(仅 Oracle)
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_MPolyFromShape(仅 PostgreSQL)
- ST_MPolyFromText(仅 Oracle)
- ST_MPolyFromWKB
- ST_MultiSurface(仅 Oracle)