الاسم
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;