الاسم
ST_3DClosestPoint — تُعيد النقطة ثلاثية الأبعاد على g1 الأقرب إلى g2. وهي النقطة الأولى من أقصر خط ثلاثي الأبعاد.
المختصر
geometry ST_3DClosestPoint(geometry g1, geometry g2);
الوصف
تُعيد النقطة ثلاثية الأبعاد على g1 الأقرب إلى g2. وهي النقطة الأولى من أقصر خط ثلاثي الأبعاد. والطول ثلاثي الأبعاد لأقصر خط ثلاثي الأبعاد هو المسافة ثلاثية الأبعاد.
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z.
تدعم هذه الدالة الأسطح متعددة الوجوه (Polyhedral surfaces).
متاحة منذ: 2.0.0
تغيّرت في: 2.2.0 - إذا كان المُدخلان شكلين ثنائيي الأبعاد، تُعاد نقطة ثنائية الأبعاد (بدلًا من السلوك القديم الذي كان يفترض 0 لقيمة Z المفقودة). وفي حالة شكل ثنائي الأبعاد وآخر ثلاثي الأبعاد، لم يعد يُفترض أن Z المفقودة تساوي 0.
أمثلة
|
خط ونقطة -- أقرب نقطة ثلاثية الأبعاد وثنائية الأبعاد SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_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;
cp3d_line_pt | cp2d_line_pt
-----------------------------------------------------------+------------------------------------------
POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(73.0769230769231 115.384615384615)
|
|
خط ونقاط متعددة -- أقرب نقطة ثلاثية الأبعاد وثنائية الأبعاد SELECT ST_AsEWKT(ST_3DClosestPoint(line,pt)) AS cp3d_line_pt,
ST_AsEWKT(ST_ClosestPoint(line,pt)) As cp2d_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;
cp3d_line_pt | cp2d_line_pt
-----------------------------------------------------------+--------------
POINT(54.6993798867619 128.935022917228 11.5475869506606) | POINT(50 75)
|
|
خطوط متعددة ومضلع -- أقرب نقطة ثلاثية الأبعاد وثنائية الأبعاد SELECT ST_AsEWKT(ST_3DClosestPoint(poly, mline)) As cp3d,
ST_AsEWKT(ST_ClosestPoint(poly, mline)) As cp2d
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;
cp3d | cp2d
-------------------------------------------+--------------
POINT(39.993580415989 54.1889925532825 5) | POINT(20 40)
|
انظر أيضًا
ST_AsEWKT, ST_ClosestPoint, ST_3DDistance, ST_3DShortestLine