الاسم
ST_3DLongestLine — تُعيد أطول خط ثلاثي الأبعاد بين شكلين
المختصر
geometry ST_3DLongestLine(geometry g1, geometry g2);
الوصف
تُعيد أطول خط ثلاثي الأبعاد بين شكلين. وتُعيد الدالة أول أطول خط إذا وُجد أكثر من واحد. يبدأ الخط المُعاد في g1 وينتهي في g2. ويساوي الطول ثلاثي الأبعاد للخط المسافة التي تُعيدها ST_3DMaxDistance.
متاحة منذ: 2.0.0
تغيّرت في: 2.2.0 - إذا كان المُدخلان شكلين ثنائيي الأبعاد، تُعاد نقطة ثنائية الأبعاد (بدلًا من السلوك القديم الذي كان يفترض 0 لقيمة Z المفقودة). وفي حالة شكل ثنائي الأبعاد وآخر ثلاثي الأبعاد، لم يعد يُفترض أن Z المفقودة تساوي 0.
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.
تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).
أمثلة
|
خط (LineString) ونقطة -- أطول خط ثلاثي الأبعاد وثنائي الأبعاد معًا SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_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;
lol3d_line_pt | lol2d_line_pt
-----------------------------------+----------------------------
LINESTRING(50 75 1000,100 100 30) | LINESTRING(98 190,100 100)
|
|
خط (LineString) ونقاط متعددة -- أطول خط ثلاثي الأبعاد وثنائي الأبعاد معًا SELECT ST_AsEWKT(ST_3DLongestLine(line,pt)) AS lol3d_line_pt,
ST_AsEWKT(ST_LongestLine(line,pt)) As lol2d_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;
lol3d_line_pt | lol2d_line_pt
---------------------------------+--------------------------
LINESTRING(98 190 1,50 74 1000) | LINESTRING(98 190,50 74)
|
|
خطوط متعددة (MultiLineString) ومضلع -- أطول خط ثلاثي الأبعاد وثنائي الأبعاد معًا SELECT ST_AsEWKT(ST_3DLongestLine(poly, mline)) As lol3d,
ST_AsEWKT(ST_LongestLine(poly, mline)) As lol2d
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;
lol3d | lol2d
------------------------------+--------------------------
LINESTRING(175 150 5,1 10 2) | LINESTRING(175 150,1 10)
|