GISarabia.org
PostGIS › الدليل الرسمي › 7. مرجع PostGIS › 7.5. دوال تحرير الأشكال الهندسية
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_Snap

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

الاسم

ST_Snap — التقاط قطع الشكل المُدخل ورؤوسه إلى رؤوس شكل مرجعي.

المختصر

geometry ST_Snap(geometry input, geometry reference, float tolerance);

الوصف

تلتقط رؤوس شكل هندسي وقطعه إلى رؤوس شكل هندسي آخر. يُستخدم تسامح مسافة الالتقاط للتحكم في مواضع الالتقاط. الشكل الناتج هو الشكل المُدخل بعد التقاط رؤوسه. وإذا لم يحدث أي التقاط فيُعاد الشكل المُدخل دون تغيير.

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

قد يؤدي الإفراط في الالتقاط إلى إنشاء طوبولوجيا غير صالحة، لذا يُحدَّد عدد الرؤوس الملتقطة ومواضعها باستخدام أساليب استدلالية لتقرير متى يكون الالتقاط آمنًا. لكن هذا قد يؤدي إلى إغفال بعض عمليات الالتقاط المحتملة.

[ملاحظة]

قد يفقد الشكل المُعاد بساطته (انظر ST_IsSimple) وصلاحيته (انظر ST_IsValid).

تُنفَّذ بواسطة وحدة GEOS.

متاحة منذ: 2.0.0

أمثلة

مضلع متعدد معروض مع خط (قبل أي التقاط)

مضلع متعدد ملتقط إلى خط بتسامح: 1.01 من المسافة. يُعرض المضلع المتعدد الجديد مع الخط المرجعي

SELECT ST_AsText(ST_Snap(poly,line, ST_Distance(poly,line)*1.01)) AS polysnapped
FROM (SELECT
   ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
 MULTIPOLYGON(((26 125,26 200,126 200,126 125,101 100,26 125),
 (51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

مضلع متعدد ملتقط إلى خط بتسامح: 1.25 من المسافة. يُعرض المضلع المتعدد الجديد مع الخط المرجعي

SELECT ST_AsText(
    ST_Snap(poly,line, ST_Distance(poly,line)*1.25)
  ) AS polysnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
    (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      ( 51 150, 101 150, 76 175, 51 150 )),
      (( 151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

                             polysnapped
---------------------------------------------------------------------
MULTIPOLYGON(((5 107,26 200,126 200,126 125,101 100,54 84,5 107),
(51 150,101 150,76 175,51 150)),((151 100,151 200,176 175,151 100)))
                                

الخط ملتقطًا إلى المضلع المتعدد الأصلي بتسامح 1.01 من المسافة. يُعرض الخط الجديد مع المضلع المتعدد المرجعي

SELECT ST_AsText(
   ST_Snap(line, poly, ST_Distance(poly,line)*1.01)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     ((26 125, 26 200, 126 200, 126 125, 26 125),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100)))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;

              linesnapped
----------------------------------------
 LINESTRING(5 107,26 125,54 84,101 100)
                                

الخط ملتقطًا إلى المضلع المتعدد الأصلي بتسامح 1.25 من المسافة. يُعرض الخط الجديد مع المضلع المتعدد المرجعي

SELECT ST_AsText(
 ST_Snap(line, poly, ST_Distance(poly,line)*1.25)
  ) AS linesnapped
FROM (SELECT
  ST_GeomFromText('MULTIPOLYGON(
     (( 26 125, 26 200, 126 200, 126 125, 26 125 ),
      (51 150, 101 150, 76 175, 51 150 )),
      ((151 100, 151 200, 176 175, 151 100 )))') As poly,
       ST_GeomFromText('LINESTRING (5 107, 54 84, 101 100)') As line
        ) As foo;
              linesnapped
---------------------------------------
LINESTRING(26 125,54 84,101 100)
                                

انظر أيضًا

ST_SnapToGrid