Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_SPLIT

📄字数 2.1K
👁️阅读量 加载中...

功能描述

按(多)点、(多)线串或(多)多边形边界分割线串,或按线串分割(多)多边形,返回一个集合。

语法格式

sql
GEOMETRY ST_SPLIT(GEOMETRY input, GEOMETRY blade);

参数说明

  • geom:目标 GEOMETRY 对象。
  • blade:切割器,用来切割目标几何对象。

函数返回类型

GEOMETRY 类型

使用说明

  1. 当(多)多边形用作切割器时,其线性分量(边界)用于分割输入。
  2. 返回的结果几何图形始终是一个集合。
  3. 该函数在某种意义上与 ST_Union 相反。
  4. 此函数是由 GEOS 模块执行的。

示例

用一条线分割多边形,生成几何集合,包含两个多边形:

sql
SQL> SELECT ST_AsText( ST_Split(
                     ST_Buffer(ST_GeomFromText('POINT(100 90)'), 50), -- circle
                     ST_MakeLine(ST_Point(10, 10),ST_Point(190, 190)) -- line
         ));

+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          EXPR1                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GEOMETRYCOLLECTION(POLYGON((150 90,149.0392640201615 80.24548389919359,146.19397662556435 70.86582838174552,141.57348061512727 62.22148834901989,135.35533905932738 54.64466094067263,127.77851165098011 48.42651938487274,119.1341716182545 43.80602337443566,109.75451610080641 40.960735979838475,100 40,90.24548389919359 40.960735979838475,80.86582838174552 43.80602337443566,72.2214883490199 48.42651938487273,64.64466094067262 54.64466094067262,60.13711795745844 60.13711795745844,129.86288204254154 129.86288204254154,135.35533905932738 125.35533905932738,141.57348061512727 117.77851165098011,146.19397662556432 109.13417161825453,149.0392640201615 99.75451610080644,150 90)),POLYGON((60.13711795745844 60.13711795745844,58.426519384872734 62.22148834901989,53.80602337443566 70.8658283817455,50.960735979838475 80.24548389919357,50 90,50.960735979838475 99.75451610080641,53.80602337443566 109.13417161825448,58.42651938487273 117.7785116509801,64.64466094067262 125.35533905932738,72.22148834901989 131.57348061512727,80.86582838174549 136.19397662556432,90.24548389919357 139.0392640201615,99.99999999999999 140,109.75451610080641 139.0392640201615,119.1341716182545 136.19397662556435,127.7785116509801 131.57348061512727,129.86288204254154 129.86288204254154,60.13711795745844 60.13711795745844))) |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

(1 row)

将一个多线串(MultiLineString)通过一个点分割,其中这个点正好位于两个线串元素上。

sql
SQL> SELECT ST_AsText(ST_Split(
         'MULTILINESTRING((10 10, 190 190), (15 15, 30 30, 100 90))',
         ST_Point(30,30))) As split;

+------------------------------------------------------------------------------------------------------------------------+
|                                                         SPLIT                                                          |
+------------------------------------------------------------------------------------------------------------------------+
| GEOMETRYCOLLECTION(LINESTRING(10 10,30 30),LINESTRING(30 30,190 190),LINESTRING(15 15,30 30),LINESTRING(30 30,100 90)) |
+------------------------------------------------------------------------------------------------------------------------+

(1 row)

将 LineString 用点分割,其中该点并不正好位于线上。 显示使用 ST_Snap 将线捕捉到点以允许将其分割。

sql
SQL> WITH data AS (SELECT
       'LINESTRING(0 0, 100 100)'::geometry AS line,
       'POINT(51 50)':: geometry AS point
     )
     SELECT ST_AsText( ST_Split( ST_Snap(line, point, 1), point)) AS snapped_split,
            ST_AsText( ST_Split(line, point)) AS not_snapped_not_split
            FROM data;

+---------------------------------------------------------------------+---------------------------------------------+
|                            SNAPPED_SPLIT                            |            NOT_SNAPPED_NOT_SPLIT            |
+---------------------------------------------------------------------+---------------------------------------------+
| GEOMETRYCOLLECTION(LINESTRING(0 0,51 50),LINESTRING(51 50,100 100)) | GEOMETRYCOLLECTION(LINESTRING(0 0,100 100)) |
+---------------------------------------------------------------------+---------------------------------------------+

(1 row)