GISarabia.org
PostGIS › الدليل الرسمي › 11. مرجع الرستر › 11.12. معالجة الرستر: جبر الخرائط (Map Algebra)
PostGIS 3.6 · Official Manual · ترجمة عربية

ST_Clip

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

الاسم

ST_Clip — تُعيد الرستر مقصوصًا بالشكل الهندسي المُدخل. إذا لم يُحدَّد رقم النطاق، فتُعالَج جميع النطاقات. إذا لم يُحدَّد crop أو كان TRUE، فيُقتطع الرستر الناتج. إذا ضُبط touched على TRUE، فتُضمَّن البكسلات الملامِسة، وإلا فلا يُضمَّن البكسل إلا إذا وقع مركزه داخل الشكل الهندسي.

المختصر

raster ST_Clip(raster rast, integer[] nband, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, integer nband, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, integer nband, geometry geom, boolean crop, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, double precision[] nodataval=NULL, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, double precision nodataval, boolean crop=TRUE, boolean touched=FALSE);

raster ST_Clip(raster rast, geometry geom, boolean crop, boolean touched=FALSE);

الوصف

تُعيد رسترًا مقصوصًا بالشكل الهندسي المُدخل geom. إذا لم يُحدَّد فهرس النطاق، فتُعالَج جميع النطاقات.

يجب أن تكون للرسترات الناتجة عن ST_Clip قيمة nodata مُسندة للمناطق المقصوصة، واحدة لكل نطاق. إذا لم تُقدَّم أي قيمة ولم تكن للرستر المُدخل قيمة nodata معرّفة، فتُضبط قيم nodata للرستر الناتج على ST_MinPossibleValue(ST_BandPixelType(rast, band)). عندما يكون عدد قيم nodata في المصفوفة أقل من عدد النطاقات، تُستخدم القيمة الأخيرة في المصفوفة للنطاقات المتبقية. وإذا كان عدد قيم nodata أكبر من عدد النطاقات، فتُتجاهل قيم nodata الزائدة. وجميع الأشكال التي تقبل مصفوفة من قيم nodata تقبل أيضًا قيمة واحدة تُسنَد إلى كل نطاق.

إذا لم يُحدَّد crop، فيُفترض true، أي أن الرستر الناتج يُقتطع إلى تقاطع امتدادي geomوrast. إذا ضُبط crop على false، فيأخذ الرستر الجديد امتداد rast نفسه. إذا ضُبط touched على true، فتُختار جميع البكسلات في rast التي تتقاطع مع الشكل الهندسي.

[ملاحظة]

السلوك الافتراضي هو touched=false، الذي لا يختار إلا البكسلات التي يغطي الشكل الهندسي مراكزها.

حُسّنت في: 3.5.0 - أُضيف الوسيط touched.

متاحة منذ: 2.0.0

حُسّنت في: 2.1.0 أُعيدت كتابتها بلغة C

تستخدم الأمثلة هنا بيانات الصور الجوية لولاية Massachusetts المتاحة على موقع MassGIS MassGIS Aerial Orthos.

أمثلة: مقارنة اختيار جميع البكسلات الملامِسة مقابل عدم اختيارها

SELECT ST_Count(rast) AS count_pixels_in_orig, ST_Count(rast_touched) AS all_touched_pixels, ST_Count(rast_not_touched) AS default_clip
FROM ST_AsRaster(ST_Letters('R'), scalex =
> 1.0, scaley =
> -1.0) AS r(rast)
    INNER JOIN ST_GeomFromText('LINESTRING(0 1, 5 6, 10 10)') AS g(geom)
 ON ST_Intersects(r.rast,g.geom)
 , ST_Clip(r.rast, g.geom, touched =
> true) AS rast_touched
 , ST_Clip(r.rast, g.geom, touched =
> false) AS rast_not_touched;

 count_pixels_in_orig | all_touched_pixels | default_clip
----------------------+--------------------+--------------
                 2605 |                 16 |           10
(1 row)
 

أمثلة: قص نطاق واحد (من دون touched)

-- Clip the first band of an aerial tile by a 20 meter buffer.
SELECT ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20)
    ) from aerials.boston
WHERE rid = 4;
                    
-- Demonstrate effect of crop on final dimensions of raster
-- Note how final extent is clipped to that of the geometry
-- if crop = true
SELECT ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, true))) As xmax_w_trim,
    ST_XMax(clipper) As xmax_clipper,
    ST_XMax(ST_Envelope(ST_Clip(rast, 1, clipper, false))) As xmax_wo_trim,
    ST_XMax(ST_Envelope(rast)) As xmax_rast_orig
FROM (SELECT rast, ST_Buffer(ST_Centroid(ST_Envelope(rast)),6) As clipper
    FROM aerials.boston
WHERE rid = 6) As foo;

   xmax_w_trim    |   xmax_clipper   |   xmax_wo_trim   |  xmax_rast_orig
------------------+------------------+------------------+------------------
 230657.436173996 | 230657.436173996 | 230666.436173996 | 230666.436173996
                    

بلاطة الرستر كاملة قبل القص

بعد القص

أمثلة: قص نطاق واحد من دون اقتطاع وإعادة إضافة النطاقات الأخرى دون تغيير

-- Same example as before, but we need to set crop to false to be able to use ST_AddBand
-- because ST_AddBand requires all bands be the same Width and height
SELECT ST_AddBand(ST_Clip(rast, 1,
        ST_Buffer(ST_Centroid(ST_Envelope(rast)),20),false
    ), ARRAY[ST_Band(rast,2),ST_Band(rast,3)] ) from aerials.boston
WHERE rid = 6;
                    

بلاطة الرستر كاملة قبل القص

بعد القص - سريالي

أمثلة: قص جميع النطاقات

-- Clip all bands of an aerial tile by a 20 meter buffer.
-- Only difference is we don't specify a specific band to clip
-- so all bands are clipped
SELECT ST_Clip(rast,
      ST_Buffer(ST_Centroid(ST_Envelope(rast)), 20),
      false
    ) from aerials.boston
WHERE rid = 4;
                    

بلاطة الرستر كاملة قبل القص

بعد القص