Nom

ST_3DShortestLine — Renvoie la ligne 3D la plus courte entre deux géométries

Synopsis

geometry ST_3DShortestLine(geometry g1, geometry g2);

Description

Renvoie la ligne tridimensionnelle la plus courte entre deux géométries. La fonction ne renvoie que la première ligne la plus courte, si la fonction en trouve plusieurs. Si g1 et g2 se croisent en un seul point, la fonction renvoie une ligne dont le début et la fin se trouvent à ce point d'intersection. Si g1 et g2 se croisent en plus d'un point, la fonction renvoie une ligne dont le début et la fin se situent au même point, mais qui peut être n'importe lequel des points d'intersection. La ligne renvoyée commencera toujours en g1 et se terminera en g2. La longueur 3D de la ligne renvoyée par cette fonction sera toujours la même que ST_3DDistance renvoie pour g1 et g2.

Disponibilité : 2.0.0

Modifié : 2.2.0 - si 2 géométries 2D sont saisies, un point 2D est renvoyé (au lieu de l'ancien comportement supposant 0 pour Z manquant). Dans le cas de 2D et 3D, Z n'est plus supposé être 0 pour Z manquant.

Cette fonction prend en charge la 3D et ne supprime pas l'indice z.

Cette fonction prend en charge les surfaces Polyhedral.

Exemples

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;
Export de raster
-[ 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;
Export de raster
-[ 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;
Export de raster
-[ 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