Name

ST_3DShortestLine — Gibt den kürzesten 3-dimensionalen Abstand zwischen zwei geometrischen Objekten als Linie zurück

Synopsis

geometry ST_3DShortestLine(geometry g1, geometry g2);

Beschreibung

Gibt den kürzesten 3-dimensionalen Abstand zwischen zwei geometrischen Objekten als Linie zurück. Wenn es mehrere kürzeste Abstände gibt, dann wird nur der erste zurückgegeben, der von der Funktion gefunden wurde. Wenn sich g1 und g2 nur in einem Punkt schneiden, dann gibt die Funktion eine Linie zurück, die ihren Anfang und ihr Ende in dem Schnittpunkt hat. Wenn sich g1 und g2 in mehreren Punkten schneiden, dann gibt die Funktion eine Linie zurück, die Anfang und Ende in irgendeinem der Schnittpunkte hat. Die zurückgegebene Linie beginnt immer mit g1 und endet mit g2. Die Länge der 3D-Linie die von dieser Funktion zurückgegeben wird ist immer ident mit der von ST_3DDistance für g1 und g2 zurückgegebenen Distanz.

Verfügbarkeit: 2.0.0

Änderung: 2.2.0 - Wenn 2 geometrische Objekte in 2D übergegeben werden, wird ein 2D-Punkt zurückgegeben (anstelle wie früher 0 für ein fehlendes Z). Im Falle von 2D und 3D, wird für fehlende Z nicht länger 0 angenommen.

Diese Funktion unterstützt 3d und lässt den Z-Index nicht fallen.

Diese Funktion unterstützt polyedrische Flächen.

Beispiele

Linienzug und Punkt -- kürzester Abstand in 3D und in 2D

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)
                                        

Linienstück und Mehrfachpunkt -- kürzester Abstand in 3D und in 2D

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)
                                        

Mehrfachlinienzug und Polygon - kürzester Abstand in 3D und in 2D

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)