الاسم
ST_Difference — تحسب شكلًا هندسيًا يمثّل جزء الشكل الهندسي A الذي لا يتقاطع مع الشكل الهندسي B.
المختصر
geometry ST_Difference(geometry geomA, geometry geomB, float8 gridSize = -1);
الوصف
تُعيد شكلًا هندسيًا يمثّل جزء الشكل الهندسي A الذي لا يتقاطع مع الشكل الهندسي B. وهذا يكافئ A - ST_Intersection(A,B). إذا كان A محتوًى بالكامل في B فيُعاد شكل هندسي ذري فارغ من النوع المناسب.
|
|
|
هذه دالة التراكب الوحيدة التي يهم فيها ترتيب المدخلات. تُعيد ST_Difference(A, B) دائمًا جزءًا من A. |
إذا أُعطي المعامل الاختياري gridSize (يتطلب GEOS-3.9.0 أو أحدث)، فمن المضمون أن تقع جميع رؤوس النتيجة على شبكة بالحجم المحدد. ولكي تعطي العملية نتائج متوقعة يجب أن تقع جميع رؤوس المدخلات مسبقًا على الشبكة المحددة، انظر ST_ReducePrecision.
تُنفَّذ بواسطة وحدة GEOS
حُسّنت في: 3.1.0 قبول المعامل gridSize.
يتطلب GEOS >= 3.9.0 لاستخدام المعامل gridSize.
تطبّق هذه الدالة مواصفة OGC Simple Features Implementation Specification for SQL 1.1. s2.1.1.3
تطبّق هذه الدالة مواصفة SQL/MM. SQL-MM 3: 5.1.20
تدعم هذه الدالة الأبعاد الثلاثية ولا تُسقط قيمة Z. غير أن النتيجة تُحسب باستخدام XY فقط. وتُنسخ قيم Z في النتيجة أو يُحسب متوسطها أو تُستوفى.
أمثلة
|
![]() الخطوط المُدخلة
|
![]() فرق الخطين
|
فرق خطوط ثنائية الأبعاد.
SELECT ST_AsText(
ST_Difference(
'LINESTRING(50 100, 50 200)'::geometry,
'LINESTRING(50 50, 50 150)'::geometry
)
);
st_astext
---------
LINESTRING(50 150,50 200)
فرق نقاط ثلاثية الأبعاد.
SELECT ST_AsEWKT( ST_Difference(
'MULTIPOINT(-118.58 38.38 5,-118.60 38.329 6,-118.614 38.281 7)' :: geometry,
'POINT(-118.614 38.281 5)' :: geometry
) );
st_asewkt
---------
MULTIPOINT(-118.6 38.329 6,-118.58 38.38 5)
انظر أيضًا
ST_SymDifference, ST_Intersection, ST_Union, ST_ReducePrecision

