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

ST_Intersection

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

الاسم

ST_Intersection — تُعيد رسترًا أو مجموعة من أزواج (شكل هندسي-قيمة بكسل) تمثل الجزء المشترك بين رسترين أو التقاطع الهندسي بين تحويل الرستر إلى متجهات وشكل هندسي.

المختصر

setof geomval ST_Intersection(geometry geom, raster rast, integer band_num=1);

setof geomval ST_Intersection(raster rast, geometry geom);

setof geomval ST_Intersection(raster rast, integer band, geometry geomin);

raster ST_Intersection(raster rast1, raster rast2, double precision[] nodataval);

raster ST_Intersection(raster rast1, raster rast2, text returnband, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, double precision[] nodataval);

raster ST_Intersection(raster rast1, integer band1, raster rast2, integer band2, text returnband, double precision[] nodataval);

الوصف

تُعيد رسترًا أو مجموعة من أزواج (شكل هندسي-قيمة بكسل) تمثل الجزء المشترك بين رسترين أو التقاطع الهندسي بين تحويل الرستر إلى متجهات وشكل هندسي.

تعمل الأشكال الثلاثة الأولى، التي تُعيد setof geomval، في الفضاء المتجهي. إذ يُحوَّل الرستر أولًا إلى متجهات (باستخدام ST_DumpAsPolygons) في صورة مجموعة من صفوف geomval، ثم تُقاطَع هذه الصفوف مع الشكل الهندسي باستخدام دالة PostGIS ST_Intersection (geometry, geometry). الأشكال الهندسية التي لا تتقاطع إلا مع منطقة ذات قيمة nodata في الرستر تُعيد شكلًا هندسيًا فارغًا. وتُستبعد عادةً من النتائج بالاستخدام الصحيح لـ ST_Intersects في عبارة WHERE.

يمكنك الوصول إلى جزأي الشكل الهندسي والقيمة من مجموعة geomval الناتجة بإحاطتها بأقواس وإضافة '.geom' أو '.val' في نهاية التعبير. مثلًا (ST_Intersection(rast, geom)).geom

أما الأشكال الأخرى، التي تُعيد رسترًا، فتعمل في فضاء الرستر. وهي تستخدم نسخة ST_MapAlgebraExpr ذات الرسترين لإجراء التقاطع.

يقابل امتداد الرستر الناتج التقاطع الهندسي لامتدادي الرسترين. يتضمن الرستر الناتج النطاقات 'BAND1' أو 'BAND2' أو 'BOTH' بحسب ما يُمرَّر في المعامل returnband. تؤدي مناطق قيمة nodata الموجودة في أي نطاق إلى مناطق قيمة nodata في جميع نطاقات الناتج. بعبارة أخرى، أي بكسل يتقاطع مع بكسل ذي قيمة nodata يصبح بكسلًا ذا قيمة nodata في الناتج.

يجب أن تكون للرسترات الناتجة عن ST_Intersection قيمة nodata مُسندة للمناطق غير المتقاطعة. يمكنك تعريف قيمة nodata لأي نطاق ناتج أو استبدالها بتقديم مصفوفة nodataval[] تضم قيمة nodata واحدة أو اثنتين بحسب ما إذا طلبت النطاقات 'BAND1' أو 'BAND2' أو 'BOTH'. تستبدل القيمة الأولى في المصفوفة قيمة nodata في النطاق الأول، وتستبدل القيمة الثانية قيمة nodata في النطاق الثاني. إذا لم تكن لأحد النطاقين المُدخلين قيمة nodata معرّفة ولم تُقدَّم أي قيمة في مصفوفة، فتُختار قيمة باستخدام الدالة ST_MinPossibleValue. وجميع الأشكال التي تقبل مصفوفة من قيم nodata يمكنها أيضًا قبول قيمة واحدة تُسنَد إلى كل نطاق مطلوب.

في جميع الأشكال، إذا لم يُحدَّد رقم النطاق فيُفترض النطاق 1. إذا كنت تحتاج إلى تقاطع بين رستر وشكل هندسي يُعيد رسترًا، فراجع ST_Clip.

[ملاحظة]

لمزيد من التحكم في الامتداد الناتج أو فيما يُعاد عند مصادفة قيمة nodata، استخدم نسخة ST_MapAlgebraExpr ذات الرسترين.

[ملاحظة]

لحساب تقاطع نطاق رستر مع شكل هندسي في فضاء الرستر، استخدم ST_Clip. تعمل ST_Clip على الرسترات متعددة النطاقات ولا تُعيد نطاقًا يقابل الشكل الهندسي المحوَّل إلى رستر.

[ملاحظة]

ينبغي استخدام ST_Intersection بالاقتران مع ST_Intersects ومع فهرس على عمود الرستر و/أو عمود الشكل الهندسي.

حُسّنت في: 2.0.0 - أُدخل التقاطع في فضاء الرستر. في الإصدارات السابقة لـ 2.0.0، لم يكن مدعومًا إلا التقاطع المُجرى في الفضاء المتجهي.

أمثلة: شكل هندسي ورستر -- ينتج عنهما قيم geomval

SELECT
    foo.rid,
    foo.gid,
    ST_AsText((foo.geomval).geom) As geomwkt,
    (foo.geomval).val
FROM (
    SELECT
        A.rid,
        g.gid,
        ST_Intersection(A.rast, g.geom) As geomval
    FROM dummy_rast AS A
    CROSS JOIN (
        VALUES
            (1, ST_Point(3427928, 5793243.85) ),
            (2, ST_GeomFromText('LINESTRING(3427927.85 5793243.75,3427927.8 5793243.75,3427927.8 5793243.8)')),
            (3, ST_GeomFromText('LINESTRING(1 2, 3 4)'))
    ) As g(gid,geom)
    WHERE A.rid = 2
) As foo;

 rid | gid |      geomwkt                                               | val
-----+-----+---------------------------------------------------------------------------------------------
   2 |   1 | POINT(3427928 5793243.85)                                  | 249
   2 |   1 | POINT(3427928 5793243.85)                                  | 253
   2 |   2 | POINT(3427927.85 5793243.75)                               | 254
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 251
   2 |   2 | POINT(3427927.8 5793243.8)                                 | 253
   2 |   2 | LINESTRING(3427927.8 5793243.75,3427927.8 5793243.8)   | 252
   2 |   2 | MULTILINESTRING((3427927.8 5793243.8,3427927.8 5793243.75),...) | 250
   2 |   3 | GEOMETRYCOLLECTION EMPTY