Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_3DLONGESTLINE

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

功能描述

返回两个几何图形之间的 三维最长直线。

语法格式

sql
GEOMETRY ST_3DLONGESTLINE(GEOMETRY g1, GEOMETRY g2);

参数说明

  • g1:第一个 GEOMETRY 对象。
  • g2:第二个 GEOMETRY 对象。

函数返回类型

GEOMETRY 类型

使用说明

  1. 如果有多个线,该函数将返回第一个最长的线。
  2. 返回的线以 g1 开始,以 g2 结束。 线的 3D 长度等于 ST_3DMAXDISTANCE 返回的距离。
  3. 该函数支持 3d 并且不会丢失 z-index。
  4. 该函数支持多面体曲面。

示例

点和线之间,3D/2D 最长的线:

sql
SQL> SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt
        FROM (SELECT 'POINT(100 100 30)'::geometry As pt,
                        'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 1000)'::geometry As line
                ) As foo;

+-----------------------------------+----------------------------+
|           LOL3D_LINE_PT           |       LOL2D_LINE_PT        |
+-----------------------------------+----------------------------+
| LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100) |
+-----------------------------------+----------------------------+

(1 row)

多点和线串之间,3D/2D 最长线:

sql
SQL> SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
                     ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_line_pt
             FROM (SELECT 'MULTIPOINT(100 100 30, 50 74 1000)'::geometry As pt,
                             'LINESTRING (20 80 20, 98 190 1, 110 180 3, 50 75 900)'::geometry As line
                     ) As foo;

+---------------------------------+--------------------------+
|          LOL3D_LINE_PT          |      LOL2D_LINE_PT       |
+---------------------------------+--------------------------+
| LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74) |
+---------------------------------+--------------------------+

(1 row)

多边形和多线串之间,3D/2D 最长的线:

sql
SQL> SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d,
         ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d
             FROM (SELECT  ST_GeomFromEWKT('POLYGON((175 150 5, 20 40 5, 35 45 5, 50 60 5, 100 100 5, 175 150 5))') As poly,
                     ST_GeomFromEWKT('MULTILINESTRING((175 155 2, 20 40 20, 50 60 -2, 125 100 1, 175 155 1),
                     (1 10 2, 5 20 1))') As mline ) As foo;

+------------------------------+--------------------------+
|            LOL3D             |          LOL2D           |
+------------------------------+--------------------------+
| LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10) |
+------------------------------+--------------------------+

(1 row)