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

ST_LineCrossingDirection

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

الاسم

ST_LineCrossingDirection — تُعيد رقمًا يشير إلى سلوك العبور بين خطين (LineString)

المختصر

integer ST_LineCrossingDirection(geometry linestringA, geometry linestringB);

الوصف

بالنظر إلى خطين، تُعيد عددًا صحيحًا بين ‎-3 و3 يشير إلى نوع سلوك العبور الموجود بينهما. يشير 0 إلى عدم وجود عبور. هذا مدعوم فقط لـ LINESTRING.

لرقم العبور المعاني التالية:

  • 0: LINE NO CROSS (لا عبور)

  • -1: LINE CROSS LEFT (عبور إلى اليسار)

  • 1: LINE CROSS RIGHT (عبور إلى اليمين)

  • -2: LINE MULTICROSS END LEFT (عبور متعدد ينتهي إلى اليسار)

  • 2: LINE MULTICROSS END RIGHT (عبور متعدد ينتهي إلى اليمين)

  • -3: LINE MULTICROSS END SAME FIRST LEFT (عبور متعدد ينتهي في الجهة نفسها، أوله إلى اليسار)

  • 3: LINE MULTICROSS END SAME FIRST RIGHT (عبور متعدد ينتهي في الجهة نفسها، أوله إلى اليمين)

متاحة منذ: 1.4

أمثلة

مثال: LINE CROSS LEFT وLINE CROSS RIGHT

الأزرق: الخط A؛ الأخضر: الخط B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING (20 140, 71 74, 161 53)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
        -1 |         1

مثال: LINE MULTICROSS END SAME FIRST LEFT وLINE MULTICROSS END SAME FIRST RIGHT

الأزرق: الخط A؛ الأخضر: الخط B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
 ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
 ST_GeomFromText('LINESTRING(171 154,20 140,71 74,161 53)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
         3 |        -3

مثال: LINE MULTICROSS END LEFT وLINE MULTICROSS END RIGHT

الأزرق: الخط A؛ الأخضر: الخط B

SELECT ST_LineCrossingDirection(lineA, lineB) As A_cross_B,
       ST_LineCrossingDirection(lineB, lineA) As B_cross_A
FROM (SELECT
  ST_GeomFromText('LINESTRING(25 169,89 114,40 70,86 43)') As lineA,
  ST_GeomFromText('LINESTRING(5 90, 71 74, 20 140, 171 154)') As lineB
  ) As foo;

 A_cross_B | B_cross_A
-----------+-----------
        -2 |         2

مثال: إيجاد جميع الشوارع المتعابرة


SELECT s1.gid, s2.gid, ST_LineCrossingDirection(s1.geom, s2.geom)
  FROM streets s1 CROSS JOIN streets s2
         ON (s1.gid != s2.gid AND s1.geom && s2.geom )
WHERE ST_LineCrossingDirection(s1.geom, s2.geom) 
> 0;

انظر أيضًا

ST_Crosses