名称

ST_ReducePrecision — 返回有效的几何图形,其点舍入到网格公差。

大纲

geometry ST_ReducePrecision(geometry g, float8 gridsize);

描述

返回有效的几何图形,其中所有点均舍入到提供的网格公差,并删除低于公差的要素。

ST_SnapToGrid 不同,返回的几何图形将是有效的,没有环自相交或折叠组件。

精度降低可用于:

  • 将坐标精度与数据精度相匹配

  • 减少表示几何图形所需的坐标数量

  • 确保有效的几何输出为使用较低精度的格式(例如,当输出小数位数有限时,WKT、GeoJSON 或 KML 等文本格式)。

  • 将有效几何图形导出到使用较低或有限精度的系统(例如 SDE、Oracle 公差值)

可用性:3.1.0。

需要GEOS >= 3.9.0。

示例

Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 0.1);
栅格输出
POINT(1.4 19.3)
Figure
Geometry figure for visual-st-reduceprecision-01
Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 1.0);
栅格输出
POINT(1 19)
Figure
Geometry figure for visual-st-reduceprecision-02
Code
SELECT ST_ReducePrecision('POINT(1.412 19.323)', 10);
栅格输出
POINT(0 20)
Figure
Geometry figure for visual-st-reduceprecision-03

降低精度可以减少顶点数量

Code
SELECT ST_ReducePrecision('LINESTRING (10 10,19.6 30.1,20 30,20.3 30,40 40)', 1);
栅格输出
LINESTRING (10 10, 20 30, 40 40)
Figure
Geometry figure for visual-st-reduceprecision-04

如果需要的话,精度降低会分割多边形以确保有效性

Code
WITH data(geom) AS (
  VALUES ('POLYGON ((10 10,60 60.1,70 30,40 40,50 10,10 10))'::geometry)
)
SELECT geom AS input,
       ST_ReducePrecision(geom, 10) AS reduced
FROM data;
栅格输出
-[ RECORD 1 ]------------------------------------------------
input   | POLYGON((10 10,60 60.1,70 30,40 40,50 10,10 10))
reduced | MULTIPOLYGON(((10 10,40 40,50 10,10 10)),((40 40,60 60,70 30,40 40)))
Figure
Geometry figure for visual-st-reduceprecision-05