GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.16. التحويلات التآلفية (Affine)
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_Affine

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

الاسم

ST_Affine — تطبّق تحويلًا تآلفيًا ثلاثي الأبعاد على شكل هندسي.

المختصر

geometry ST_Affine(geometry geomA, float a, float b, float c, float d, float e, float f, float g, float h, float i, float xoff, float yoff, float zoff);

geometry ST_Affine(geometry geomA, float a, float b, float d, float e, float xoff, float yoff);

الوصف

تطبّق تحويلًا تآلفيًا ثلاثي الأبعاد على الشكل الهندسي لإجراء عمليات مثل الإزاحة والتدوير وتغيير المقياس في خطوة واحدة.

النسخة 1: يمثّل الاستدعاء

ST_Affine(geom, a, b, c, d, e, f, g, h, i, xoff, yoff, zoff) 

مصفوفة التحويل

/ a  b  c  xoff \
| d  e  f  yoff |
| g  h  i  zoff |
\ 0  0  0     1 /

وتُحوَّل الرؤوس كما يلي:

x' = a*x + b*y + c*z + xoff
y' = d*x + e*y + f*z + yoff
z' = g*x + h*y + i*z + zoff

جميع دوال الإزاحة / تغيير المقياس أدناه يُعبَّر عنها عبر تحويل تآلفي كهذا.

النسخة 2: تطبّق تحويلًا تآلفيًا ثنائي الأبعاد على الشكل الهندسي. يمثّل الاستدعاء

ST_Affine(geom, a, b, d, e, xoff, yoff)

مصفوفة التحويل

/  a  b  0  xoff  \       /  a  b  xoff  \
|  d  e  0  yoff  | rsp.  |  d  e  yoff  |
|  0  0  1     0  |       \  0  0     1  /
\  0  0  0     1  /

وتُحوَّل الرؤوس كما يلي:

x' = a*x + b*y + xoff
y' = d*x + e*y + yoff
z' = z 

هذه الطريقة حالة جزئية من الطريقة الثلاثية الأبعاد أعلاه.

حُسّنت في: 2.0.0 أُضيف دعم الأسطح متعددة الوجوه والمثلثات وTIN.

متاحة منذ: 1.1.2. تغيّر الاسم من Affine إلى ST_Affine في 1.2.2

[ملاحظة]

قبل الإصدار 1.3.4، كانت هذه الدالة تتعطل إذا استُخدمت مع أشكال هندسية تحتوي على منحنيات (CURVES). وقد أُصلح ذلك في 1.3.4 وما بعده

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

تدعم هذه الدالة المثلثات وأسطح الشبكات المثلثية غير المنتظمة (TIN).

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

تدعم هذه الدالة الأقواس الدائرية (Circular Strings) والمنحنيات.

أمثلة

--Rotate a 3d line 180 degrees about the z axis.  Note this is long-hand for doing ST_Rotate();
 SELECT ST_AsEWKT(ST_Affine(geom,  cos(pi()), -sin(pi()), 0,  sin(pi()), cos(pi()), 0,  0, 0, 1,  0, 0, 0)) As using_affine,
         ST_AsEWKT(ST_Rotate(geom, pi())) As using_rotate
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
        using_affine         |        using_rotate
-----------------------------+-----------------------------
 LINESTRING(-1 -2 3,-1 -4 3) | LINESTRING(-1 -2 3,-1 -4 3)
(1 row)

--Rotate a 3d line 180 degrees in both the x and z axis
SELECT ST_AsEWKT(ST_Affine(geom, cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), -sin(pi()), 0, sin(pi()), cos(pi()), 0, 0, 0))
        FROM (SELECT ST_GeomFromEWKT('LINESTRING(1 2 3, 1 4 3)') As geom) As foo;
           st_asewkt
-------------------------------
 LINESTRING(-1 -2 -3,-1 -4 -3)
(1 row)
                

انظر أيضًا

ST_Rotate, ST_Scale, ST_Translate, ST_TransScale