Name

ST_3DShortestLine — Returnerar den kortaste 3D-linjen mellan två geometrier

Synopsis

geometry ST_3DShortestLine(geometry g1, geometry g2);

Beskrivning

Returnerar den 3-dimensionella kortaste linjen mellan två geometrier. Funktionen returnerar endast den första kortaste linjen om det finns fler än en som funktionen hittar. Om g1 och g2 skär varandra i endast en punkt returnerar funktionen en linje med både start och slut i den skärningspunkten. Om g1 och g2 skär varandra i mer än en punkt kommer funktionen att returnera en linje med start och slut i samma punkt, men det kan vara vilken som helst av de skärande punkterna. Linjen som returneras börjar alltid i g1 och slutar i g2. 3D-längden på linjen som denna funktion returnerar kommer alltid att vara densamma som ST_3DDistance returnerar för g1 och g2.

Tillgänglighet: 2.0.0

Ändrad: 2.2.0 - om 2 2D-geometrier matas in returneras en 2D-punkt (istället för det gamla beteendet som antog 0 för saknad Z). Vid 2D och 3D antas Z inte längre vara 0 för saknad Z.

Denna funktion stöder 3d och kommer inte att tappa z-index.

Denna funktion stöder polyedriska ytor.

Exempel

linestrings och punkt -- både 3d och 2d kortaste linjen

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.6993798867619 128.935022917228 11.5475869506606,100 100 30)  | LINESTRING(73.0769230769231 115.384615384615,100 100)
                                        

linestrings och multipoint -- både 3d och 2d kortaste linjen

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.6993798867619 128.935022917228 11.5475869506606,100 100 30) | LINESTRING(50 75,50 74)
                                        

MultiLineString och polygon både 3d och 2d kortaste linjen

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(39.993580415989 54.1889925532825 5,40.4078575708294 53.6052383805529 5.03423778139177) | LINESTRING(20 40,20 40)