Namn

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

Compare the 3D shortest line to the 2D shortest line for a LineString and a Point.

Code
WITH input AS (
  SELECT 'POINT(100 100 30)'::geometry AS pt,
         'LINESTRING (20 80 20,98 190 1,110 180 3,50 75 1000)'::geometry AS line
)
SELECT ST_3DShortestLine(line, pt) AS shl3d_line_pt,
       ST_ShortestLine(line, pt) AS shl2d_line_pt
FROM input;
Rasterutdata
-[ RECORD 1 ]--+--------------------------------------------------------------------------------
shl3d_line_pt  | LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30)
shl2d_line_pt  | LINESTRING(73.07692307692307 115.38461538461539,100 100)
Figure
Geometry figure for visual-st-3dshortestline-01

Compare the 3D shortest line to the 2D shortest line for a LineString and a MultiPoint.

Code
WITH input AS (
  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
)
SELECT ST_3DShortestLine(line, pt) AS shl3d_line_pt,
       ST_ShortestLine(line, pt) AS shl2d_line_pt
FROM input;
Rasterutdata
-[ RECORD 1 ]--+--------------------------------------------------------------------------------
shl3d_line_pt  | LINESTRING(54.69937988676193 128.93502291722837 11.547586950660556,100 100 30)
shl2d_line_pt  | LINESTRING(50 75,50 74)
Figure
Geometry figure for visual-st-3dshortestline-02

Compare the 3D shortest line to the 2D shortest line for a Polygon and a MultiLineString.

Code
WITH input AS (
  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
)
SELECT ST_3DShortestLine(poly, mline) AS shl3d,
       ST_ShortestLine(poly, mline) AS shl2d
FROM input;
Rasterutdata
-[ RECORD 1 ]--+--------------------------------------------------------------------------------------
shl3d          | LINESTRING(40.45454545454545 53.63636363636364 5,40.45454545454545 53.63636363636364 5)
shl2d          | LINESTRING(20 40,20 40)
Figure
Geometry figure for visual-st-3dshortestline-03