الاسم
ST_RemoveIrrelevantPointsForView — تزيل النقاط غير المؤثرة في رسم عرض مستطيل محدد لشكل هندسي.
المختصر
geometry ST_RemoveIrrelevantPointsForView(geometry geom, box2d bounds, boolean cartesian_hint = false);
الوصف
تُعيد geometry دون النقاط غير المؤثرة في رسم الشكل الهندسي ضمن عرض مستطيل مُعطى.
يمكن استخدام هذه الدالة لمعالجة مسبقة سريعة للأشكال الهندسية التي ستُرسم ضمن حدود معيّنة فقط.
لا تُقيَّم إلا الأشكال من نوع (MULTI)POLYGON و(MULTI)LINESTRING. وتبقى الأشكال الأخرى دون تغيير.
على خلاف ST_ClipByBox2D() فإن هذه الدالة
-
تستبعد النقاط دون حساب نقاط تقاطع جديدة، ما يتجنب أخطاء التقريب ويحسّن الأداء عادةً،
-
تُعيد شكلًا هندسيًا بعدد نقاط مساوٍ أو مقارب،
-
تؤدي إلى نتيجة الرسم نفسها ضمن العرض المحدد، و
-
قد تُحدث تقاطعات ذاتية تجعل الشكل الناتج غير صالح (انظر المثال أدناه).
إذا ضُبط cartesian_hint على true، فتطبّق الخوارزمية تحسينات إضافية تعتمد على الرياضيات الديكارتية لتقليل عدد النقاط الناتجة أكثر. لاحظ أن استخدام هذا الخيار قد يُحدث عيوبًا في الرسم إذا أُسقطت الإحداثيات الناتجة إلى نظام إحداثي آخر (غير ديكارتي) قبل الرسم.
|
|
|
بالنسبة للمضلعات، لا تضمن هذه الدالة حاليًا صلاحية النتيجة. يمكن التحقق من هذه الحالة باستخدام ST_IsValid وإصلاحها باستخدام ST_MakeValid. |
مثال: تطبيق ST_RemoveIrrelevantPointsForView() على مضلع. تبقى النقاط الزرقاء، وتبقى كذلك نتيجة الرسم (المنطقة الزرقاء الفاتحة) ضمن مربع العرض الرمادي.
مثال: نظرًا لأن النقاط تُستبعد فحسب دون حساب نقاط جديدة، فقد تحتوي نتيجة ST_RemoveIrrelevantPointsForView() على تقاطعات ذاتية.
متاحة منذ: 3.5.0
أمثلة
SELECT ST_AsText(
ST_RemoveIrrelevantPointsForView(
ST_GeomFromText('MULTIPOLYGON(((10 10, 20 10, 30 10, 40 10, 20 20, 10 20, 10 10)),((10 10, 20 10, 20 20, 10 20, 10 10)))'),
ST_MakeEnvelope(12,12,18,18), true));
st_astext
---------
MULTIPOLYGON(((10 10,40 10,20 20,10 20,10 10)),((10 10,20 10,20 20,10 20,10 10)))
SELECT ST_AsText(
ST_RemoveIrrelevantPointsForView(
ST_GeomFromText('MULTILINESTRING((0 0, 10 0,20 0,30 0), (0 15, 5 15, 10 15, 15 15, 20 15, 25 15, 30 15, 40 15), (13 13,15 15,17 17))'),
ST_MakeEnvelope(12,12,18,18), true));
st_astext
---------
MULTILINESTRING((10 15,15 15,20 15),(13 13,15 15,17 17))
SELECT ST_AsText(
ST_RemoveIrrelevantPointsForView(
ST_GeomFromText('LINESTRING(0 0, 10 0,20 0,30 0)'),
ST_MakeEnvelope(12,12,18,18), true));
st_astext
---------
LINESTRING EMPTY
SELECT ST_AsText(
ST_RemoveIrrelevantPointsForView(
ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
ST_MakeEnvelope(12,12,18,18), true));
st_astext
---------
POLYGON((15 30,30 0,0 0,15 30))
SELECT ST_AsText(
ST_RemoveIrrelevantPointsForView(
ST_GeomFromText('POLYGON((0 30, 15 30, 30 30, 30 0, 0 0, 0 30))'),
ST_MakeEnvelope(12,12,18,18)));
st_astext
---------
POLYGON((0 30,30 30,30 0,0 0,0 30))