ST_Geometry 的空间运算函数
空间运算利用几何函数来接收输入的空间数据,对其进行分析,然后生成输出数据,输出数据为针对输入数据执行分析的派生结果。
以下的运算可以通过输入数据创建新数据。
缓冲几何
ST_Buffer 函数通过在指定距离圈定几何生成一个几何。缓冲主要几何时或者当某个集合的缓冲多边形相距足够近会重叠时,将生成单独的多边形。当被缓冲的集合中的元素之间存在足够的间距时,各个缓冲 ST_Polygons 将生成一个 ST_MultiPolygon。
ST_Buffer 函数同时接受正值距离和负值距离,但只有维度为 2 的几何(ST_Polygon 和 ST_MultiPolygon)可以应用负值缓冲。源几何的维度小于 2 时,将使用缓冲距离的绝对值;也就是说,所有几何既不是 ST_Polygon 也不是 ST_MultiPolygon。一般来说,正值缓冲距离将生成远离源几何中心的面环,(就 ST_Polygon 或 ST_MultiPolygon 的外部环而言)负值缓冲距离将生成趋向源几何中心的面环。就 ST_Polygon 或 ST_MultiPolygon 的内部环而言,缓冲距离为正值时缓冲区圆环将趋向中心;缓冲距离为负值时缓冲区圆环将远离中心。缓冲过程将合并重叠的缓冲多边形。负值距离大于多边形最大内部宽度的二分之一时,将产生一个空几何。
有关语法和示例,请参阅 ST_Buffer。
凸包
ST_ConvexHull 函数用于返回任何几何的凸多边形,该几何至少包含用于形成凸形的三个折点。如果几何的折点未形成凸形,ST_ConvexHull 将返回空值。例如,将 ST_ConvexHull 应用于由两个折点组成的一条线,将会返回空值。同样,使用 ST_ConvexHull 对某个点要素进行操作,也将返回空值。镶嵌一组点以创建不规则三角网 (TIN) 时的第一个步骤通常是创建凸多边形。
有关语法和示例,请参阅 ST_ConvexHull。
几何的差集
ST_Difference 函数用于返回主要几何中未被次要几何相交分割的部分(即空间的逻辑与非)。ST_Difference 函数仅用于操作具有相似维度的几何,并且返回与源几何具有相同维度的集合。如果源几何相等,则返回一个空几何。
在以下四个图中,第一个输入几何是黑色,第二个输入几何是橙色。
有关语法和示例,请参阅 ST_Difference。
几何的交集
ST_Intersection 函数用于返回两个几何的交集。交集始终作为一个集合返回,该集合是源几何的最小维度。例如,ST_LineString 与 ST_Polygon 相交时,ST_Intersection 函数将以 ST_MultiLineString 类型返回 ST_LineString 与 ST_Polygon 的内部和边界的公共部分。如果源 ST_LineString 有两个或更多的不连续线段与 ST_Polygon 相交,ST_MultiLineString 将包含多个 ST_LineString。如果两个几何未相交或者如果相交结果的维度比两个源几何的维度都少,将返回空几何。下图展示了一些 ST_Intersection 函数的示例。
几何的对称差集
ST_SymmetricDiff 函数用于返回两个几何的对称差集(空间的逻辑异或)。源几何必须具有相同的维度。如果两个几何相等,ST_SymmetricDiff 函数将返回一个空几何;否则,此函数将以集合的形式返回结果。
有关语法和示例,请参阅 ST_SymmetricDiff。
最小距离
先前的函数返回了新的几何。ST_Distance 函数接受两个要素作为输入,并且返回这两个要素之间的最小距离。分隔两个要素的最小距离表示在两个位置之间的最短距离(直线距离)。举例来说,该距离不是您驾车从一个位置到另一个位置必须通过的距离,而是在地图上这两个位置之间画一条直线时需要计算的距离。ST_Distance 函数用于报告分隔两个不相交几何的最小距离。如果两个几何相交(也就是说它们重合),此函数将报告最小距离为零。
聚合
聚合操作返回单个几何,该几何是对多个几何分析的结果。ST_Aggr_ConvexHull 函数用于返回由每个输入几何的凸多边形组成的多面。任何不包含凸多边形的输入几何(包含少于三个折点的任何输入几何)将不具有凸多边形。如果所有输入几何包含的折点都少于三个,ST_Aggr_ConvexHull 将返回空值。
ST_Aggr_Intersection 函数用于返回单个几何,该几何是所有输入几何交集的聚合。一个查询可能会发现大量要素相交。如果使用 ST_Intersection 运算符,将返回代表每组几何的交集的多个要素。例如,如果将一个线要素类和一个点要素类相交,将为每个交集返回一个 ST_Point 几何。
如果改用 ST_Aggr_Intersection,将仅返回一个几何集合。例如,如果要用一个几何代表上述的线要素类和点要素类的交集,ST_Aggr_Intersection 将返回一个包含交集所有点的 ST_MultiPoint 几何。但如果仅有一个点和一条线相交,此函数将返回 ST_Point 几何。
ST_Aggr_Intersection 可查找多个几何的交集;而 ST_Intersection 仅查找两个几何之间的交集。例如,如果需要查找各种特定的服务(例如,特定校区、电话服务、高速 Internet 提供商)覆盖并且由特定议员代表的地产,将需要查找所有这些区域的交集。仅查找这些区域中两个区域的交集将不会返回您需要的所有信息,因此使用 sde.ST_Aggr_Intersection 函数以便能够在同一查询中计算所有区域。
ST_Aggr_Union 函数返回一个几何,该几何是所有提供的几何的并集。这些输入几何必须具有相同的类型;例如,可以将 ST_LineString 与 ST_LineString 合并,也可以将 ST_Polygon 与 ST_Polygon 合并,但不能将 ST_LineString 要素类与 ST_Polygon 要素类合并。通过聚合并集生成的几何通常是一个集合。例如,如果需要所有小于半英亩的闲置宗地的聚合并集,返回的几何将是一个多面;除非所有满足条件的宗地都是毗连的,此时将返回一个面。