Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


ST_3DSHORTESTLINE

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

功能描述

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

语法格式

sql
GEOMETRY ST_3DSHORTESTLINE(GEOMETRY g1, GEOMETRY g2);

参数说明

  • g1:第一个目标 GEOMETRY 对象。
  • g2:第一个目标 GEOMETRY 对象。

函数返回类型

GEOMETRY 类型

使用说明

  1. 如果函数找到多个最短线,则该函数将仅返回第一个最短线。
  2. 如果 g1 和 g2 仅相交于一个点,则该函数将返回一条起点和终点均位于该交点的线。
  3. 如果 g1 和 g2 有多个点相交,该函数将返回一条起点和终点位于同一点的线,但它可以是任何相交点。
  4. 返回的线始终以 g1 开始并以 g2 结束。
  5. 此函数返回的线的 3D 长度始终与 ST_3DDistance 返回的 g1 和 g2 相同。
  6. 该函数支持 3d 并且不会丢失 z-index。
  7. 该函数支持多面体曲面。

示例

线串和点,3d 和 2d 最短线:

sql
SQL> SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                     ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_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;

+--------------------------------------------------------------------------------+----------------------------------------------------------+
|                                 SHL3D_LINE_PT                                  |                      SHL2D_LINE_PT                       |
+--------------------------------------------------------------------------------+----------------------------------------------------------+
| LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30) | LINESTRING(73.07692307692308 115.38461538461539,100 100) |
+--------------------------------------------------------------------------------+----------------------------------------------------------+

(1 row)

线串和多点,3d 和 2d 最短线:

sql
SQL> SELECT ST_AsEWKT(ST_3DShortestLine(line,pt)) AS shl3d_line_pt,
                     ST_AsEWKT(ST_ShortestLine(line,pt)) As shl2d_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;

+--------------------------------------------------------------------------------+-------------------------+
|                                 SHL3D_LINE_PT                                  |      SHL2D_LINE_PT      |
+--------------------------------------------------------------------------------+-------------------------+
| LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30) | LINESTRING(50 75,50 74) |
+--------------------------------------------------------------------------------+-------------------------+

(1 row)

多线串和多边形, 3d 和 2d 最短线

sql
SQL> SELECT ST_AsEWKT(ST_3DShortestLine(poly, mline)) As shl3d,
         ST_AsEWKT(ST_ShortestLine(poly, mline)) As shl2d
             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;

+-----------------------------------------------------------------------------------------+-------------------------+
|                                          SHL3D                                          |          SHL2D          |
+-----------------------------------------------------------------------------------------+-------------------------+
| LINESTRING(40.45454545454545 53.63636363636364 5,40.45454545454545 53.63636363636364 5) | LINESTRING(20 40,20 40) |
+-----------------------------------------------------------------------------------------+-------------------------+

(1 row)