postgis ST_ClipByBox2D用法
官方文档
概述
geometry ST_ClipByBox2D(
geometry geom, box2d box)
;
描述
以快速且宽松但可能无效的方式通过 2D 框剪切几何体。 拓扑上无效的输入几何图形不会导致抛出异常。 不保证输出几何图形有效(特别是,可能会引入多边形的自相交)。
这个函数是由 GEOS 模块执行的。
可用性:2.2.0
示例
-- Rely on implicit cast from geometry to box2d for the second parameter SELECT ST_ClipByBox2D(geom, ST_MakeEnvelope(0,0,10,10)) FROM mytab;
解读:
有2个参数,第1个是目标几何对象数据,第2个是裁剪框。返回裁剪内容(相交部分)。
需要注意的是,返回结果不保证输出几何图形有效。
裁剪框三种情况:
- 裁剪框是点:返回NULL数据。因为点不构成最小矩阵。
- 裁剪框是线:把线转换成最小矩阵,然后对比目标数据进行裁剪。
- 裁剪框是多边形:可直接对比目标数据进行裁剪
返回值有三种
- NULL—裁剪框是点
- 空值—没有相交部分
- 几何对象—相交的部分
我画了张图,应该就比较清晰了。
举例说明
SELECT ST_GeomFromText('POLYGON ((1 3,2 4,4 4,4 3,1 3))',4326) as "裁剪框",
'POLYGON ((1 5, 5 5, 5 1, 1 1, 1 5))'::geometry as "数据库数据",
ST_ClipByBox2D('POLYGON ((1 5, 5 5, 5 1, 1 1, 1 5))'::geometry, ST_GeomFromText('POLYGON ((1 3,2 4,4 4,4 3,1 3))',4326)) as "相交部分"
1、裁剪框
2、目标数据
3、裁剪数据(相交)
通过三张图可以发现,图1和图2是箱体里面,因为图1在图2中是个长方形,图2就是相交数据。
此功能类似arcgis的裁剪功能,比arcgis裁剪弱一些,因为看不到属性信息。