ST_3DCLOSESTPOINT
📄字数 1.3K
👁️阅读量 加载中...
功能描述
返回 geom1 上最接近 geom2 的三维点。
语法格式
sql
GEOMETRY ST_3DCLOSESTPOINT(GEOMETRY geom1, GEOMETRY geom2);参数说明
- geom1:第一个目标 GEOMETRY 对象。
- geom2:第二个目标 GEOMETRY 对象。
- geog1:第一个目标 GEOGRAPHY 对象。
- geog2:第二个目标 GEOGRAPHY 对象。
- use_spheroid:距离测量是否使用椭球体,可选。
- TRUE:使用椭球体。
- FALSE:在球面上进行测量,计算更快。
函数返回类型
GEOMETRY/GEOGRAPHY 类型
使用说明
- 3D 最短线的第一个点。 3D最短线的3D长度是3D距离。
- 该函数支持 3d 并且不会丢失 z-index。
- 该函数支持多面体曲面。
示例
线串和点 3D/2D 最近点:
sql
SQL> SELECT ST_ASEWKT(ST_3DCLOSESTPOINT(line,pt)) AS cp3d_line_pt,
ST_ASEWKT(ST_CLOSESTPOINT(line,pt)) As cp2d_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;
+----------------------------------------------------------------+---------------------------------------------+
| CP3D_LINE_PT | CP2D_LINE_PT |
+----------------------------------------------------------------+---------------------------------------------+
| POINT(54.69937988676193 128.93502291722837 11.547586950660556) | POINT(73.07692307692308 115.38461538461539) |
+----------------------------------------------------------------+---------------------------------------------+
(1 row)线串和多点 3D/2D 最近点:
sql
SQL> SELECT ST_AsEWKT(ST_3DCLOSESTPOINT(line,pt)) AS cp3d_line_pt,
ST_ASEWKT(ST_CLOSESTPOINT(line,pt)) As cp2d_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;
+----------------------------------------------------------------+--------------+
| CP3D_LINE_PT | CP2D_LINE_PT |
+----------------------------------------------------------------+--------------+
| POINT(54.69937988676193 128.93502291722837 11.547586950660556) | POINT(50 75) |
+----------------------------------------------------------------+--------------+
(1 row)线串和多边形 3D/2D 最近点:
sql
SQL> SELECT ST_ASEWKT(ST_3DCLOSESTPOINT(poly, mline)) As cp3d,
ST_ASEWKT(ST_CLOSESTPOINT(poly, mline)) As cp2d
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;
+----------------------------------------------+--------------+
| CP3D | CP2D |
+----------------------------------------------+--------------+
| POINT(40.45454545454545 53.63636363636364 5) | POINT(20 40) |
+----------------------------------------------+--------------+
(1 row)