33. ST_FilterByM
ST_FilterByM
-根据顶点的m值进行过滤
33.1. 概要
geometry ST_FilterByM(geometry geom, double precision min, double precision max = null, boolean returnM = false);
33.2. 描述
这个函数主要是与ST_SetEffectiveArea
一起使用。 ST_SetEffectiveArea
设置顶点的m值中的有效区域。 使用ST_FilterByM,就可以得到几何图形的简化版本,而无需进行任何计算,只需通过过滤即可
33.3. 样例
SELECT ST_AsText(ST_FilterByM(geom,30)) simplified FROM (SELECT ST_SetEffectiveArea('LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry) geom) As foo;
simplified |
---|
LINESTRING(5 2,7 25,10 10) |
34. ST_SetEffectiveArea
ST_SetEffectiveArea
-设置每个顶点的有效区域,将值存储在M纵坐标中。 然后,通过在M坐标上进行滤波,可以生成一个简化的几何图形。
34.1. 概要
geometry ST_SetEffectiveArea(geometry geomA, float threshold = 0, integer set_area = 1);
34.2. 描述
设置每个顶点的有效区域,使用Visvalingam-Whyatt算法。 有效区域存储为顶点的m值。 如果使用可选的“theshold”参数,将返回一个简化的几何图形,只包含有效面积大于或等于阈值的顶点.
当指定阈值时,可以使用该函数简化服务器端。 另一种选择是使用阈值为0。 在这种情况下,完整的几何图形将返回有效区域作为m值,客户端可以使用m值来非常快速地简化。
将实际上只做一些(多)线和(多)多边形,但你可以安全地调用它与任何类型的几何。 由于简化是在逐个对象的基础上进行的,所以您也可以向该函数提供一个GeometryCollection。
注意,返回的几何图形可能会失去其简单性(参见ST_IsSimple)
注意,拓扑图可能不会被保留,并可能导致无效的几何图形。 使用(参见ST_SimplifyPreserveTopology)保存拓扑。
输出几何图形将丢失m值中所有先前的信息
这个函数处理三维,三维将影响有效区域
34.3. 样例
计算LineString的有效面积。 因为我们使用的阈值是0,所以输入几何中的所有顶点都会返回
select ST_AsText(ST_SetEffectiveArea(geom)) all_pts,
ST_AsText(ST_SetEffectiveArea(geom,30) ) thrshld_30
FROM (SELECT 'LINESTRING(5 2, 3 8, 6 20, 7 25, 10 10)'::geometry geom) As foo;
all_pts | thrshld_30 |
---|---|
LINESTRING M (5 2 3.40282346638529e+38,3 8 29,6 20 1.5,7 25 49.5,10 10 3.40282346638529e+38) | LINESTRING M (5 2 3.40282346638529e+38,7 25 49.5,10 10 3.40282346638529e+38) |
35. ST_Split
ST_Split
-返回由分割几何图形产生的几何图形的集合。
35.1. 概要
geometry ST_Split(geometry input, geometry blade);
35.2. 描述
该函数支持用(多)点、(多)线或(多)多边形边界分割一条线,用(多)线分割一个(多)多边形。 返回的几何图形总是一个集合。
可以把这个函数看作ST_Union的反义词。 理论上,对返回集合的元素应用ST_Union应该总是生成原始几何图形。
为了提高ST_Split的稳健性,使用非常低的容差提前ST_Snap输入到刀片可能是很方便的。 否则,内部使用的坐标网格可能会导致公差问题,输入坐标和刀片不落在彼此和输入没有被正确分割(见#2192)。
35.3. 样例
SELECT ST_Split(circle, line)
FROM (SELECT ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;
result |
---|
GEOMETRYCOLLECTION(POLYGON((150 90,149.039264020162 80.2454838991936,146.193976625564 70.8658283817455,…), POLYGON(…))) |
SELECT ST_AsText((ST_Dump(ST_Split(circle, line))).geom) As wkt
FROM (SELECT
ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)) As line,
ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;
wkt |
---|
POLYGON((150 90,149.039264020162 80.2454838991936,…)) POLYGON((60.1371179574584 60.1371179574584,58.4265193848728 62.2214883490198,53.8060233744357 …)) |
SELECT ST_AsText(ST_Split(mline, pt)) As wktcut
FROM (SELECT
ST_GeomFromText('MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))') As mline,
ST_Point(30,30) As pt) As foo;
wktcut |
---|
GEOMETRYCOLLECTION(LINESTRING(10 10,30 30),LINESTRING(30 30,190 190),LINESTRING(15 15,30 30),LINESTRING(30 30,00 90)) |
36. ST_SymDifference
ST_SymDifference
-返回一个几何图形,表示a和B不相交的部分。 它被称为对称差异,因为ST_SymDifference(A,B) = ST_SymDifference(B, A)
。
36.1. 概要
geometry ST_SymDifference(geometry geomA, geometry geomB);
36.2. 描述
返回一个几何图形,该几何图形表示a和B不相交的部分。 它被称为对称差,因为ST_SymDifference(A,B) = ST_SymDifference(B, A)。 你可以把它想象成ST_Union(geomA,geomB) - ST_Intersection(A,B)。
36.3. 样例
SELECT ST_AsText(ST_SymDifference(ST_GeomFromText('LINESTRING(50 100, 50 200)'),ST_GeomFromText('LINESTRING(50 50, 50 150)')));
st_astext |
---|
MULTILINESTRING((50 150,50 200),(50 50,50 100)) |
SELECT ST_AsEWKT(ST_SymDifference(ST_GeomFromEWKT('LINESTRING(1 2 1, 1 4 2)'),ST_GeomFromEWKT('LINESTRING(1 1 3, 1 3 4)')))
st_astext |
---|
MULTILINESTRING((1 3 2.75,1 4 2),(1 1 3,1 2 2.25)) |
37. ST_Subdivide
ST_Subdivide
-返回一组几何图形,其中集合中的任何几何图形的顶点数都不超过指定的顶点数。
37.1. 概要
setof geometry ST_Subdivide(geometry geom, integer max_vertices=256);
37.2. 描述
将几何体划分为多个部分,直到一个部分只能使用max_vertex来表示为止。 点在多边形和其他覆盖操作通常是更快的索引细分数据集:“错过”的情况下,检查所有部分的盒子通常比原始几何盒覆盖更小的区域,“击中”的情况下更快,因为重新检查操作较少的点。 使用与ST_ClipByBox2D
相同的信封剪辑。 Max_vertices
必须为5或更多,因为需要5个点来表示一个封闭框。
38. ST_SwapOrdinates
ST_SwapOrdinates
— 返回给定几何图形的版本,并交换了给定的纵坐标值
38.1. 概要
geometry ST_SwapOrdinates(geometry geom, cstring ords);
38.2. 描述
返回交换了给定坐标的给定几何图形的版本。
ords参数是一个2个字符的字符串,命名要交换的坐标。 有效的名称是:x、y、z和m。
38.3. 样例
-- Scale M value by 2
SELECT ST_AsText(ST_SwapOrdinates(ST_Scale(ST_SwapOrdinates(g,'xm'),2, 1),'xm')) FROM ( SELECT 'POINT ZM (0 0 0 2)'::geometry g ) foo;
st_astext |
---|
POINT ZM (0 0 0 4) |
39. ST_Union
ST_Union
-返回一个几何图形,它表示几何图形的点集并集。
39.1. 概要
geometry ST_Union(geometry set g1field);
geometry ST_Union(geometry g1, geometry g2);
geometry ST_Union(geometry[] g1_array);
39.2. 描述
输出类型可以是MULTI*、单个几何图形或几何集合。 有2个变种。 变体1结合2个几何图形,产生一个没有相交区域的新几何图形。 Variant 2是一个聚合函数,它接受一组几何图形并将它们合并为单个ST_Geometry,从而没有相交区域。
聚合版本:该函数从一组几何图形中返回一个MULTI几何图形或NON-MULTI几何图形。 ST_Union()函数是PostgreSQL术语中的一个“聚合”函数。 这意味着它对数据行进行操作,就像SUM()和AVG()函数所做的一样,而且像大多数聚合一样,它也忽略NULL几何图形。
非聚合版本:该函数返回一个几何图形,它是两个输入几何图形的并集。 输出类型可以是MULTI*、NON-MULTI或GEOMETRYCOLLECTION。 如果其中任何一个是NULL,则返回NULL。
ST_Collect和ST_Union通常是可以互换的。 ST_Union通常比ST_Collect慢几个数量级,因为它试图消除边界并重新排序几何图形,以确保构造的Multi*没有相交区域。
39.3. 样例
- 聚合的例子
SELECT stusps,ST_Multi(ST_Union(f.the_geom)) as singlegeom FROM sometable As f GROUP BY stusps
- 非聚合的例子
SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'), ST_GeomFromText('POINT(-2 3)') ) )
st_astext |
---|
MULTIPOINT(-2 3,1 2) |
SELECT ST_AsText(ST_Union(ST_GeomFromText('POINT(1 2)'),ST_GeomFromText('POINT(1 2)') ));
st_astext |
---|
POINT(1 2) |
SELECT ST_AsEWKT(st_union(the_geom)) FROM (SELECT ST_GeomFromEWKT('POLYGON((-7 4.2,-7.1 4.2,-7.1 4.3,-7 4.2))') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('POINT(5 5 5)') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('POINT(-2 3 1)') as the_geom
UNION ALL
SELECT ST_GeomFromEWKT('LINESTRING(5 5 5, 10 10 10)') as the_geom ) as foo;
st_asewkt |
---|
GEOMETRYCOLLECTION(POINT(-2 3 1),LINESTRING(5 5 5,10 10 10),POLYGON((-7 4.2 5,-7.1 4.2 5,-7.1 4.3 5,-7 4.2 5))); |
SELECT ST_Union(ARRAY(SELECT the_geom FROM sometable));
SELECT ST_AsText(ST_Union(ARRAY[ST_GeomFromText('LINESTRING(1 2, 3 4)'),ST_GeomFromText('LINESTRING(3 4, 4 5)')])) As wktunion;
wktunion |
---|
MULTILINESTRING((3 4,4 5),(1 2,3 4)) |
40. ST_UnaryUnion
ST_UnaryUnion
—— 类似于ST_Union,但工作在几何组件级别。
40.1. 概要
geometry ST_UnaryUnion(geometry geom);
40.2. 描述
与ST_Union不同,ST_UnaryUnion消除了多多边形组件之间的边界(无效),并在几何集合的组件之间执行并集。 输入几何图形的每个组件都假定是有效的,所以你不会从蝴蝶结多边形中得到一个有效的多多边形(无效)。
你可以用这个函数给一组行字符串结节点。 你可以混合使用ST_UnaryUnion和ST_Collect来微调一次分解多少个几何图形,从而在内存大小和CPU时间上都很好,找到ST_Union和ST_MemUnion之间的平衡。
41. ST_VoronoiLines
ST_VoronoiLines
-返回从geometry的顶点构造的Voronoi图的细胞之间的边界。
41.1. 概要
geometry ST_VoronoiLines( g1 geometry , tolerance float8 , extend_to geometry );
41.2. 描述
ST_VoronoiLines
从提供的几何图形的顶点计算二维Voronoi图,并以MultiLineString
的形式返回该图中单元格之间的边界。 如果输入几何为空,返回null。 如果输入几何图形只包含一个顶点,则返回一个空几何集合。 如果extend_to信封的面积为零,则返回一个空的几何集合
•“tolerance”:顶点之间的距离被认为是等效的。 通过提供一个非零容忍距离,可以提高算法的鲁棒性。 (默认= 0.0)
•“extend_to”:如果一个几何提供“extend_to”参数,将扩展到覆盖图的包络线“extend_to”几何,除非比默认的小信封,信封(默认= NULL,默认的输入几何边界框(信封大小)延长大约50%在每个方向)。
41.3. 样例
SELECT ST_VoronoiLines(geom, 30) As geom FROM (SELECT 'MULTIPOINT (50 30, 60 30, 100 100,10 150, 110 120)'::geometry As geom ) As g
ST_AsText |
---|
MULTILINESTRING((135.555555555556 270,36.8181818181818 92.2727272727273) ,(36.8181818181818 92.2727272727273,-110 43.3333333333333),(230 -45.7142857142858,36.8181818181818 92.2727272727273)) |
42. ST_VoronoiPolygons
ST_VoronoiPolygons
—返回从几何体的顶点构造的Voronoi图的单元格。
42.1. 概要
geometry ST_VoronoiPolygons( g1 geometry , tolerance float8 , extend_to geometry );
42.2. 描述
ST_VoronoiPolygons从提供的几何图形的顶点计算二维Voronoi图。 结果是一个GeometryCollection of Polygons,它覆盖的包络线比输入顶点的范围还要大。 如果输入几何为空,返回null。 如果输入几何图形只包含一个顶点,则返回一个空几何集合。 如果extend_to信封的面积为零,则返回一个空的几何集合。
-
‘tolerance’:顶点之间的距离被认为是相等的。 通过提供一个非零容忍距离,可以提高算法的鲁棒性。 (默认= 0.0)
-
‘extend_to’”’:如果一个几何提供“extend_to”参数,将扩展到覆盖图的包络线“extend_to”几何,除非比默认的小信封,信封(默认= NULL,默认的输入几何边界框(信封大小)延长大约50%在每个方向)。
结果是一个GeometryCollection of Polygons,它覆盖的包络线比输入顶点的范围还要大。 如果输入几何为空,返回null。 如果输入几何图形只包含一个顶点,则返回一个空几何集合。 如果extend_to信封的面积为零,则返回一个空的几何集合。 -
‘tolerance’:顶点之间的距离被认为是相等的。 通过提供一个非零容忍距离,可以提高算法的鲁棒性。 (默认= 0.0)
-
‘extend_to’”’:如果一个几何提供“extend_to”参数,将扩展到覆盖图的包络线“extend_to”几何,除非比默认的小信封,信封(默认= NULL,默认的输入几何边界框(信封大小)延长大约50%在每个方向)。