其他分享
首页 > 其他分享> > PostGIS的Geometry Processing 几何处理_1 ST_Buffer&&ST_BuildArea

PostGIS的Geometry Processing 几何处理_1 ST_Buffer&&ST_BuildArea

作者:互联网

1. ST_Buffer

ST_Buffer - (T)返回一个几何图形,覆盖从输入几何图形给定距离内的所有点。

1.1. 概要

geometry ST_Buffer(geometry g1, float radius_of_buffer);
geometry ST_Buffer(geometry g1, float radius_of_buffer, integer num_seg_quarter_circle);
geometry ST_Buffer(geometry g1, float radius_of_buffer, text buffer_style_parameters);
geography ST_Buffer(geography g1, float radius_of_buffer_in_meters);
geography ST_Buffer(geography g1, float radius_of_buffer, integer num_seg_quarter_circle);
geography ST_Buffer(geography g1, float radius_of_buffer, text buffer_style_parameters);

1.2. 描述

返回一个几何/地理值,表示与此几何/地理值的距离小于或等于距离的所有点。
几何学:计算在几何学的空间参考系统中。 在1.5中引入了不同的端盖和斜盖设置来控制形状。

对地理这可能不会像预期如果对象是足够大,它介于两个UTM区或跨越国际日期变更线增强:2.5.0 ST_Buffer几何支持增强的同时允许缓冲规范一起= | |左右可用性:1.5 - ST_Buffer增强,支持不同结束描述和连接类型。 这些是有用的,例如,转换道路线字符串为多边形道路与平或正方形的边缘,而不是圆角的边缘。 添加了地理信息的薄包装。 需要GEOS >= 3.2来利用高级几何功能。

可选的第三个参数(目前只适用于几何)可以指定用于近似四分之一圆的段的数量(整数情况,默认为8)或空白分隔的键值对列表(字符串情况),以调整操作如下:

半径的单位是以空间参考系的单位来度量的。
输入参数可以是: POINTS, MULTIPOINTS, LINESTRINGS, MULTILINESTRINGS, POLYGONS, MULTIPOLYGONS和GeometryCollections

这个函数忽略了第三维(z),即使是在呈现3d几何图形时,也总是给出一个2d缓冲区。
人们经常犯这样的错误,用这个函数来做半径搜索。 为半径搜索创建缓冲区是缓慢且毫无意义的。 使用ST_DWithin代替。

1.3. 样例

  1. quad_segs=8 (default)
SELECT ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 'quad_segs=8');

在这里插入图片描述

  1. quad_segs=2 (lame)
SELECT ST_Buffer(ST_GeomFromText('POINT(100 90)'),50, 'quad_segs=2');

在这里插入图片描述

  1. endcap=round join=round (default)
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'endcap=round join=round');

在这里插入图片描述

  1. endcap=square
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'endcap=square join=round');

在这里插入图片描述

  1. join=bevel
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'join=bevel');

在这里插入图片描述

  1. join=mitre mitre_limit=5.0 (default mitre limit)
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'join=mitre mitre_limit=5.0');

在这里插入图片描述

  1. side=left
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'side=left');

在这里插入图片描述

  1. side=right
SELECT ST_Buffer(ST_GeomFromText('LINESTRING(50 50,150 150,150 50)'), 10, 'side=right');

在这里插入图片描述

  1. right-hand-winding, polygon boundary side=left
SELECT ST_Buffer(ST_ForceRHR(ST_Boundary(ST_GeomFromText('POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))),), 20, 'side=left');

在这里插入图片描述

  1. right-hand-winding, polygon boundary side=right
SELECT ST_Buffer(ST_ForceRHR(ST_Boundary(ST_GeomFromText('POLYGON ((50 50, 50 150, 150 150, 150 50, 50 50))'))), 20,'side=right')

在这里插入图片描述

  1. 具体使用
SELECT ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50)) As 
promisingcircle_pcount,ST_NPoints(ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50, 2)) As lamecircle_pcount;
promisingcircle_pcountlamecircle_pcount
339
SELECT ST_AsText(ST_Buffer(ST_Transform(ST_SetSRID(ST_MakePoint(-71.063526, 42.35785),4269), 26986),100,2)) As octagon;
octagon
POLYGON((236057.59057465 900908.759918696,236028.301252769 900838.049240578,235 957.59057465 900808.759918696,235886.879896532 900838.049240578,235857.59057465 900908.759918696,235886.879896532 900979.470596815,235957.59057465 901008.759918 696,236028.301252769 900979.470596815,236057.59057465 900908.759918696))

2. ST_BuildArea

ST_BuildArea -创建一个由给定几何体的组成线组成的区域几何体

2.1. 概要

geometry ST_BuildArea(geometry A);

2.2. 描述

创建一个由给定几何体的组成线组成的区域几何体。 返回类型可以是Polygon或MultiPolygon,这取决于输入。 如果输入的线条不形成多边形,则返回NULL。 输入可以是LINESTRINGS、MULTILINESTRINGS、polygon、multipolygon和GeometryCollections。

2.3. 样例

SELECT ST_BuildArea(ST_Collect(smallc,bigc)) FROM (SELECTST_Buffer(ST_GeomFromText('POINT(100 90)'), 25) As smallc,ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As bigc) As foo;

在这里插入图片描述

SELECT ST_BuildArea(ST_Collect(line,circle))
FROM (SELECTST_Buffer(ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)),5) As line,ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;
--这就造成了同样的大洞
--而是用线条代替多边形
SELECT ST_BuildArea(ST_Collect(ST_ExteriorRing(line),ST_ExteriorRing(circle)))
FROM (SELECT ST_Buffer(ST_MakeLine(ST_MakePoint(10, 10),ST_MakePoint(190, 190)),5) As line,ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50) As circle) As foo;

在这里插入图片描述

标签:150,GeomFromText,Buffer,50,ST,Geometry,SELECT
来源: https://blog.csdn.net/a13407142317/article/details/120864746