ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Geometry Processing 几何处理 7

2021-12-02 19:02:54  阅读:209  来源: 互联网

标签:10 几何图形 Geometry Processing ST geometry geom 几何 SELECT


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_ptsthrshld_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%在每个方向)。

标签:10,几何图形,Geometry,Processing,ST,geometry,geom,几何,SELECT
来源: https://blog.csdn.net/a13407142317/article/details/121675537

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有