Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_LINECROSSINGDIRECTION

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

功能描述

给定两个线串,返回它们之间存在的交叉行为编号。

语法格式

sql
INTEGER ST_LINECROSSINGDIRECTION(GEOMETRY linestringA, GEOMETRY linestringB);

参数说明

  • linestringA:第一个目标 LINESTRING 对象。
  • linestringB:第二个目标 LINESTRING 对象。

函数返回类型

INTEGER 类型

使用说明

  1. 仅 LINESTRING 支持此功能。
  2. 交叉行为编号,范围:[-3, 3]。含义如下:
  • 0:线无交叉。
  • -1:向左交叉线。
  • 1:向右交叉线。
  • -2:表示一条线段多次交叉,并且最后一次交叉是从左侧。
  • 2:表示一条线段多次交叉,并且最后一次交叉是从右侧。
  • -3:表示一条线段多次交叉,但最后一次交叉是从同一侧(首次)的左侧。
  • 3:表示一条线段多次交叉,但最后一次交叉是从同一侧(首次)的右侧。

示例

向左交叉线和向右交叉线:

sql
SQL> SELECT ST_LINECROSSINGDIRECTION(lineA, lineB) As A_cross_B,
            ST_LINECROSSINGDIRECTION(lineB, lineA) As B_cross_A
     FROM (SELECT
       ST_GEOMFROMTEXT('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
       ST_GEOMFROMTEXT('LINESTRING (20 140, 71 74, 161 53)') As lineB
       ) As foo;

+-----------+-----------+
| A_CROSS_B | B_CROSS_A |
+-----------+-----------+
| -1        | 1         |
+-----------+-----------+

(1 row)

一条线段多次交叉并且最后一次交叉从同一侧(首次)左侧和一条线段多次交叉并且最后一次交叉从同一侧(首次)右侧:

sql
SQL> SELECT ST_LINECROSSINGDIRECTION(lineA, lineB) As A_cross_B,
            ST_LINECROSSINGDIRECTION(lineB, lineA) As B_cross_A
     FROM (SELECT
      ST_GEOMFROMTEXT('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
      ST_GEOMFROMTEXT('LINESTRING(171 154,20 140,71 74,161 53)') As lineB
       ) As foo;

+-----------+-----------+
| A_CROSS_B | B_CROSS_A |
+-----------+-----------+
| 3         | -3        |
+-----------+-----------+

(1 row)

一条线段多次交叉并且最后一次交叉从左侧和一条线段多次交叉并且最后一次交叉从右侧:

sql
SQL> SELECT ST_LINECROSSINGDIRECTION(lineA, lineB) As A_cross_B,
            ST_LINECROSSINGDIRECTION(lineB, lineA) As B_cross_A
     FROM (SELECT
       ST_GEOMFROMTEXT('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
       ST_GEOMFROMTEXT('LINESTRING(5 90, 71 74, 20 140, 171 154)') As lineB
       ) As foo;

+-----------+-----------+
| A_CROSS_B | B_CROSS_A |
+-----------+-----------+
| -2        | 2         |
+-----------+-----------+

(1 row)