GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.12. دوال القياس
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_3DShortestLine

الصفحة الأصلية بالإنجليزية postgis.net ↗

الاسم

ST_3DShortestLine — تُعيد أقصر خط ثلاثي الأبعاد بين شكلين هندسيين

المختصر

geometry ST_3DShortestLine(geometry g1, geometry g2);

الوصف

تُعيد أقصر خط ثلاثي الأبعاد بين شكلين هندسيين. إذا وُجد أكثر من أقصر خط، تُعيد الدالة الخط الأول الذي تجده فقط. إذا تقاطع g1 وg2 في نقطة واحدة فقط، تُعيد الدالة خطًا يبدأ وينتهي في نقطة التقاطع تلك. وإذا تقاطع g1 وg2 في أكثر من نقطة، تُعيد الدالة خطًا يبدأ وينتهي في النقطة نفسها، لكنها قد تكون أيًّا من نقاط التقاطع. يبدأ الخط المُعاد دائمًا في g1 وينتهي في g2. والطول ثلاثي الأبعاد للخط الذي تُعيده هذه الدالة يساوي دائمًا ما تُعيده ST_3DDistance لـ g1 وg2.

متاحة منذ: 2.0.0

تغيّرت في: 2.2.0 - إذا كان المُدخلان شكلين ثنائيي الأبعاد، تُعاد نقطة ثنائية الأبعاد (بدلًا من السلوك القديم الذي كان يفترض 0 لقيمة Z المفقودة). وفي حالة شكل ثنائي الأبعاد وآخر ثلاثي الأبعاد، لم يعد يُفترض أن Z المفقودة تساوي 0.

تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.

تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).

أمثلة

خط (LineString) ونقطة -- أقصر خط ثلاثي الأبعاد وثنائي الأبعاد معًا

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)
                                        

خط (LineString) ونقاط متعددة -- أقصر خط ثلاثي الأبعاد وثنائي الأبعاد معًا

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) ومضلع -- أقصر خط ثلاثي الأبعاد وثنائي الأبعاد معًا

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)