GISarabia.org
PostGIS 3.6 · Official Manual · ترجمة عربية

فصل 11. مرجع الرستر

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

فصل 11. مرجع الرستر

raster نوع في PostGIS لتخزين بيانات الرستر وتحليلها.

لتحميل الرستر من ملفات الرستر يُرجى الرجوع إلى قسم 10.1, “تحميل الرستر وإنشاؤه”

تستخدم بعض الأمثلة في هذا المرجع جدول رستر من بيانات وهمية، أُنشئ بالشيفرة التالية:

CREATE TABLE dummy_rast(rid integer, rast raster);
INSERT INTO dummy_rast(rid, rast)
VALUES (1,
('01' -- little endian (uint8 ndr)
||
'0000' -- version (uint16 0)
||
'0000' -- nBands (uint16 0)
||
'0000000000000040' -- scaleX (float64 2)
||
'0000000000000840' -- scaleY (float64 3)
||
'000000000000E03F' -- ipX (float64 0.5)
||
'000000000000E03F' -- ipY (float64 0.5)
||
'0000000000000000' -- skewX (float64 0)
||
'0000000000000000' -- skewY (float64 0)
||
'00000000' -- SRID (int32 0)
||
'0A00' -- width (uint16 10)
||
'1400' -- height (uint16 20)
)::raster
),
-- Raster: 5 x 5 pixels, 3 bands, PT_8BUI pixel type, NODATA = 0
(2,  ('01000003009A9999999999A93F9A9999999999A9BF000000E02B274A' ||
'41000000007719564100000000000000000000000000000000FFFFFFFF050005000400FDFEFDFEFEFDFEFEFDF9FAFEF' ||
'EFCF9FBFDFEFEFDFCFAFEFEFE04004E627AADD16076B4F9FE6370A9F5FE59637AB0E54F58617087040046566487A1506CA2E3FA5A6CAFFBFE4D566DA4CB3E454C5665')::raster);

الدوال أدناه هي التي يُرجّح أن يحتاج إليها مستخدم PostGIS Raster. وهناك دوال دعم أخرى للرستر لا تهمّ المستخدم العام.

11.1. أنواع البيانات الداعمة للرستر

خلاصة

يسرد هذا القسم أنواع بيانات PostgreSQL التي أُنشئت خصيصاً لدعم وظائف الرستر.

  • geomval — نوع بيانات مكاني ذو حقلين - geom (يحمل كائناً هندسياً) وval (يحمل قيمة بكسل بدقة مزدوجة من نطاق رستر).
  • addbandarg — نوع مركّب يُستخدم مُدخلاً للدالة ST_AddBand ويحدد خصائص النطاق الجديد وقيمته الابتدائية.
  • rastbandarg — نوع مركّب يُستخدم عند الحاجة إلى التعبير عن رستر ورقم نطاق في ذلك الرستر.
  • raster — نوع بيانات الرستر المكاني.
  • reclassarg — نوع مركّب يُستخدم مُدخلاً للدالة ST_Reclass ويحدد سلوك إعادة التصنيف.
  • summarystats — نوع مركّب تُعيده الدالتان ST_SummaryStats وST_SummaryStatsAgg.
  • unionarg — نوع مركّب يُستخدم مُدخلاً للدالة ST_Union ويحدد النطاقات المراد معالجتها وسلوك عملية UNION.

11.2. إدارة الرستر

  • AddRasterConstraints — تُضيف قيود الرستر إلى جدول رستر محمَّل لعمود محدد، تقيّد النظام المرجعي المكاني، والمقياس، وحجم الكتلة، والمحاذاة، والنطاقات، ونوع النطاق، وعلامةً تدل على ما إذا كان عمود الرستر مقسّمًا إلى كتل منتظمة. يجب أن يكون الجدول محمَّلًا بالبيانات لكي يمكن استنتاج القيود. تُعيد true إذا نجح ضبط القيود، وتُصدر إشعارًا خلاف ذلك.
  • DropRasterConstraints — تحذف قيود رستر PostGIS التي تشير إلى عمود في جدول رستر. مفيدة إذا احتجت إلى إعادة تحميل البيانات أو تحديث بيانات عمود الرستر.
  • AddOverviewConstraints — توسم عمود رستر بأنه عرض مُصغَّر (overview) لعمود آخر.
  • DropOverviewConstraints — تُزيل وسم عمود رستر بأنه عرض مُصغَّر لعمود آخر.
  • PostGIS_GDAL_Version — تُبلغ عن إصدار مكتبة GDAL التي يستخدمها PostGIS.
  • PostGIS_Raster_Lib_Build_Date — تُبلغ عن تاريخ البناء الكامل لمكتبة الرستر.
  • PostGIS_Raster_Lib_Version — تُبلغ عن الإصدار الكامل للرستر ومعلومات إعدادات البناء.
  • ST_GDALDrivers — تُعيد قائمة بصيغ الرستر التي يدعمها PostGIS عبر GDAL. لا يمكن استخدام سوى الصيغ ذات can_write=True مع ST_AsGDALRaster
  • UpdateRasterSRID — تغيّر SRID لجميع الرسترات في العمود والجدول اللذين يحددهما المستخدم.
  • ST_CreateOverview — تُنشئ نسخة منخفضة الدقة من تغطية رستر معينة.

11.3. منشئات الرستر

  • ST_AddBand — تُعيد رسترًا أُضيف إليه نطاق (أو نطاقات) جديد من النوع المحدد بالقيمة الأولية المحددة في موضع الفهرس المحدد. إذا لم يُحدَّد فهرس، يُضاف النطاق في النهاية.
  • ST_AsRaster — تحوّل شكلًا هندسيًا (geometry) في PostGIS إلى رستر PostGIS.
  • ST_AsRasterAgg — دالة تجميعية. ترسم الأشكال الهندسية في PostGIS في رستر جديد.
  • ST_Band — تُعيد نطاقًا أو أكثر من رستر موجود في صورة رستر جديد. مفيدة لبناء رسترات جديدة من رسترات موجودة.
  • ST_MakeEmptyCoverage — تغطي منطقة مُسندة جغرافيًا بشبكة من بلاطات رستر فارغة.
  • ST_MakeEmptyRaster — تُعيد رسترًا فارغًا (بلا نطاقات) بالأبعاد المحددة (العرض & الارتفاع)، وX وY للزاوية العلوية اليسرى، وحجم البكسل والدوران (scalex وscaley وskewx & skewy)، والنظام المرجعي (srid). إذا مُرّر رستر، تُعيد رسترًا جديدًا بالحجم والمحاذاة وSRID نفسها. وإذا أُغفل srid، يُضبط النظام المرجعي المكاني على غير معروف (0).
  • ST_Tile — تُعيد مجموعة من الرسترات الناتجة عن تقسيم الرستر المُدخَل بناءً على الأبعاد المطلوبة للرسترات الناتجة.
  • ST_Retile — تُعيد مجموعة من البلاطات المُهيّأة من تغطية رستر مقسّمة إلى بلاطات بشكل عشوائي.
  • ST_FromGDALRaster — تُعيد رسترًا من ملف رستر مدعوم في GDAL.

11.4. دوال الوصول إلى الرستر

  • ST_GeoReference — تُعيد البيانات الوصفية للإسناد الجغرافي بصيغة GDAL أو ESRI كما تظهر عادةً في ملف العالم (world file). القيمة الافتراضية GDAL.
  • ST_Height — تُعيد ارتفاع الرستر بالبكسل.
  • ST_IsEmpty — تُعيد true إذا كان الرستر فارغًا (العرض = 0 والارتفاع = 0)، وإلا تُعيد false.
  • ST_MemSize — تُعيد مقدار المساحة (بالبايت) التي يشغلها الرستر.
  • ST_MetaData — تُعيد البيانات الوصفية الأساسية لكائن رستر مثل حجم البكسل، والدوران (الانحراف)، والزاوية العلوية والسفلية اليسرى، وغير ذلك.
  • ST_NumBands — تُعيد عدد النطاقات في كائن الرستر.
  • ST_PixelHeight — تُعيد ارتفاع البكسل بالوحدات الهندسية للنظام المرجعي المكاني.
  • ST_PixelWidth — تُعيد عرض البكسل بالوحدات الهندسية للنظام المرجعي المكاني.
  • ST_ScaleX — تُعيد المركّبة X لعرض البكسل بوحدات النظام المرجعي للإحداثيات.
  • ST_ScaleY — تُعيد المركّبة Y لارتفاع البكسل بوحدات النظام المرجعي للإحداثيات.
  • ST_RasterToWorldCoord — تُعيد الزاوية العلوية اليسرى للرستر في صورة X وY هندسيين (خط الطول ودائرة العرض) بمعلومية عمود وصف. يبدأ ترقيم العمود والصف من 1.
  • ST_RasterToWorldCoordX — تُعيد الإحداثي الهندسي X للزاوية العلوية اليسرى لرستر وعمود وصف. يبدأ ترقيم الأعمدة والصفوف من 1.
  • ST_RasterToWorldCoordY — تُعيد الإحداثي الهندسي Y للزاوية العلوية اليسرى لرستر وعمود وصف. يبدأ ترقيم الأعمدة والصفوف من 1.
  • ST_Rotation — تُعيد دوران الرستر بالراديان.
  • ST_SkewX — تُعيد انحراف X للإسناد الجغرافي (أو معامل الدوران).
  • ST_SkewY — تُعيد انحراف Y للإسناد الجغرافي (أو معامل الدوران).
  • ST_SRID — تُعيد مُعرّف النظام المرجعي المكاني للرستر كما هو معرَّف في الجدول spatial_ref_sys.
  • ST_Summary — تُعيد ملخصًا نصيًا لمحتويات الرستر.
  • ST_UpperLeftX — تُعيد إحداثي X للزاوية العلوية اليسرى للرستر في النظام المرجعي المكاني المُسقَط.
  • ST_UpperLeftY — تُعيد إحداثي Y للزاوية العلوية اليسرى للرستر في النظام المرجعي المكاني المُسقَط.
  • ST_Width — تُعيد عرض الرستر بالبكسل.
  • ST_WorldToRasterCoord — تُعيد الزاوية العلوية اليسرى في صورة عمود وصف بمعلومية X وY هندسيين (خط الطول ودائرة العرض) أو شكل هندسي نقطي مُعبَّر عنه في نظام الإحداثيات المرجعي المكاني للرستر.
  • ST_WorldToRasterCoordX — تُعيد العمود في الرستر المقابل للشكل الهندسي النقطي (pt) أو لإحداثيَّي العالم X وY (xw، yw) المُمثَّلين في النظام المرجعي المكاني العالمي للرستر.
  • ST_WorldToRasterCoordY — تُعيد الصف في الرستر المقابل للشكل الهندسي النقطي (pt) أو لإحداثيَّي العالم X وY (xw، yw) المُمثَّلين في النظام المرجعي المكاني العالمي للرستر.

11.5. دوال الوصول إلى نطاقات الرستر

  • ST_BandMetaData — تُعيد البيانات الوصفية الأساسية لنطاق رستر محدد. يُفترض النطاق رقم 1 إذا لم يُحدَّد.
  • ST_BandNoDataValue — تُعيد القيمة التي تمثّل انعدام البيانات (no data) في نطاق معيّن. إذا لم يُحدَّد نطاق يُفترض الرقم 1.
  • ST_BandIsNoData — تُعيد true إذا كان النطاق ممتلئًا بقيم nodata فقط.
  • ST_BandPath — تُعيد مسار الملف في النظام لنطاق مخزّن في نظام الملفات. إذا لم يُحدَّد bandnum، يُفترض 1.
  • ST_BandFileSize — تُعيد حجم ملف نطاق مخزّن في نظام الملفات. إذا لم يُحدَّد bandnum، يُفترض 1.
  • ST_BandFileTimestamp — تُعيد الطابع الزمني لملف نطاق مخزّن في نظام الملفات. إذا لم يُحدَّد bandnum، يُفترض 1.
  • ST_BandPixelType — تُعيد نوع البكسل للنطاق المحدد. إذا لم يُحدَّد bandnum، يُفترض 1.
  • ST_MinPossibleValue — تُعيد أصغر قيمة يمكن لنوع البكسل هذا تخزينها.
  • ST_HasNoBand — تُعيد true إذا لم يوجد نطاق برقم النطاق المحدد. إذا لم يُحدَّد رقم نطاق، يُفترض رقم النطاق 1.

11.6. دوال الوصول إلى بكسلات الرستر وضبطها

  • ST_PixelAsPolygon — تُعيد الشكل الهندسي المضلع الذي يحدّ البكسل لصف وعمود معينين.
  • ST_PixelAsPolygons — تُعيد الشكل الهندسي المضلع الذي يحدّ كل بكسل في نطاق رستر مع القيمة وإحداثيَّي الرستر X وY لكل بكسل.
  • ST_PixelAsPoint — تُعيد شكلًا هندسيًا نقطيًا للزاوية العلوية اليسرى من البكسل.
  • ST_PixelAsPoints — تُعيد شكلًا هندسيًا نقطيًا لكل بكسل في نطاق رستر مع القيمة وإحداثيَّي الرستر X وY لكل بكسل. إحداثيات الشكل الهندسي النقطي هي إحداثيات الزاوية العلوية اليسرى من البكسل.
  • ST_PixelAsCentroid — تُعيد المركز الهندسي (شكلًا هندسيًا نقطيًا) للمساحة التي يمثّلها بكسل.
  • ST_PixelAsCentroids — تُعيد المركز الهندسي (شكلًا هندسيًا نقطيًا) لكل بكسل في نطاق رستر مع القيمة وإحداثيَّي الرستر X وY لكل بكسل. الشكل الهندسي النقطي هو المركز الهندسي للمساحة التي يمثّلها البكسل.
  • ST_Value — تُعيد قيمة نطاق معيّن في بكسل معيّن (columnx، rowy) أو عند نقطة هندسية معينة. يبدأ ترقيم النطاقات من 1 ويُفترض 1 إذا لم يُحدَّد. إذا ضُبط exclude_nodata_value على false، فإن جميع البكسلات بما فيها بكسلات nodata تُعدّ متقاطعة وتُعيد قيمة. وإذا لم يُمرَّر exclude_nodata_value، فتُقرأ قيمته من البيانات الوصفية للرستر.
  • ST_NearestValue — تُعيد أقرب قيمة غير NODATA لبكسل نطاق معيّن محدد بـ columnx وrowy أو بنقطة هندسية مُعبَّر عنها في نظام الإحداثيات المرجعي المكاني نفسه للرستر.
  • ST_SetZ — تُعيد شكلًا هندسيًا له إحداثيات X/Y نفسها للشكل الهندسي المُدخَل، مع نسخ قيم من الرستر إلى البعد Z باستخدام خوارزمية إعادة التشكيل المطلوبة.
  • ST_SetM — تُعيد شكلًا هندسيًا له إحداثيات X/Y نفسها للشكل الهندسي المُدخَل، مع نسخ قيم من الرستر إلى بعد القياس M باستخدام خوارزمية إعادة التشكيل المطلوبة.
  • ST_Neighborhood — تُعيد مصفوفة ثنائية الأبعاد من نوع double precision تضم القيم غير NODATA المحيطة ببكسل نطاق معيّن محدد إما بـ columnX وrowY أو بنقطة هندسية مُعبَّر عنها في نظام الإحداثيات المرجعي المكاني نفسه للرستر.
  • ST_SetValue — تُعيد الرستر المعدَّل الناتج عن ضبط قيمة نطاق معيّن في بكسل معيّن (columnx، rowy) أو في البكسلات التي تتقاطع مع شكل هندسي معيّن. يبدأ ترقيم النطاقات من 1 ويُفترض 1 إذا لم يُحدَّد.
  • ST_SetValues — تُعيد الرستر المعدَّل الناتج عن ضبط قيم نطاق معيّن.
  • ST_DumpValues — تحصل على قيم النطاق المحدد في صورة مصفوفة ثنائية الأبعاد.
  • ST_PixelOfValue — تحصل على إحداثيَّي columnx وrowy للبكسل الذي تساوي قيمته قيمة البحث.

11.7. دوال تحرير الرستر

  • ST_SetGeoReference — تضبط معاملات الإسناد الجغرافي الستة في استدعاء واحد. يجب فصل الأعداد بمسافات بيضاء. تقبل المُدخَلات بصيغة GDAL أو ESRI. القيمة الافتراضية GDAL.
  • ST_SetRotation — تضبط دوران الرستر بالراديان.
  • ST_SetScale — تضبط حجم البكسلات في الاتجاهين X وY بوحدات النظام المرجعي للإحداثيات. عدد الوحدات لكل بكسل عرضًا/ارتفاعًا.
  • ST_SetSkew — تضبط انحراف X وY للإسناد الجغرافي (أو معامل الدوران). إذا مُرّرت قيمة واحدة فقط، تضبط X وY على القيمة نفسها.
  • ST_SetSRID — تضبط SRID لرستر على قيمة srid عددية صحيحة معيّنة معرَّفة في الجدول spatial_ref_sys.
  • ST_SetUpperLeft — تضبط قيمة الزاوية العلوية اليسرى من بكسل الرستر على إحداثيَّي X وY المُسقَطين.
  • ST_Resample — تُعيد تشكيل (resample) رستر باستخدام خوارزمية إعادة تشكيل محددة، وأبعاد جديدة، وزاوية شبكة عشوائية، ومجموعة من سمات الإسناد الجغرافي للرستر معرَّفة أو مستعارة من رستر آخر.
  • ST_Rescale — تُعيد تشكيل رستر بضبط مقياسه (أو حجم بكسله) فقط. تُحسب قيم البكسلات الجديدة باستخدام خوارزمية إعادة التشكيل NearestNeighbor (بالتهجئة الإنجليزية أو الأمريكية) أو Bilinear أو Cubic أو CubicSpline أو Lanczos أو Max أو Min. القيمة الافتراضية NearestNeighbor.
  • ST_Reskew — تُعيد تشكيل رستر بضبط انحرافه (أو معاملات دورانه) فقط. تُحسب قيم البكسلات الجديدة باستخدام خوارزمية إعادة التشكيل NearestNeighbor (بالتهجئة الإنجليزية أو الأمريكية) أو Bilinear أو Cubic أو CubicSpline أو Lanczos. القيمة الافتراضية NearestNeighbor.
  • ST_SnapToGrid — تُعيد تشكيل رستر بالتقاطه إلى شبكة. تُحسب قيم البكسلات الجديدة باستخدام خوارزمية إعادة التشكيل NearestNeighbor (بالتهجئة الإنجليزية أو الأمريكية) أو Bilinear أو Cubic أو CubicSpline أو Lanczos. القيمة الافتراضية NearestNeighbor.
  • ST_Resize — تغيّر حجم رستر إلى عرض/ارتفاع جديد
  • ST_Transform — تُعيد إسقاط رستر من نظام مرجعي مكاني معروف إلى نظام مرجعي مكاني معروف آخر باستخدام خوارزمية إعادة اعتيان محددة. الخيارات هي NearestNeighbor وBilinear وCubic وCubicSpline وLanczos، والافتراضي NearestNeighbor.

11.8. دوال تحرير نطاقات الرستر

  • ST_SetBandNoDataValue — تضبط قيمة النطاق المحدد التي تمثل غياب البيانات (nodata). يُفترض النطاق 1 إذا لم يُحدَّد نطاق. لتعليم نطاق بأنه لا يملك قيمة nodata، اضبط قيمة nodata = NULL.
  • ST_SetBandIsNoData — تضبط علامة isnodata للنطاق على TRUE.
  • ST_SetBandPath — تحديث المسار الخارجي ورقم النطاق لنطاق مخزَّن خارج قاعدة البيانات (out-db)
  • ST_SetBandIndex — تحديث رقم النطاق الخارجي لنطاق out-db

11.9. إحصاءات نطاقات الرستر وتحليلاتها

  • ST_Count — تُعيد عدد البكسلات في نطاق معيّن من رستر أو تغطية رستر. إذا لم يُحدَّد نطاق فالافتراضي هو النطاق 1. إذا ضُبط exclude_nodata_value على true، فستُعدّ فقط البكسلات غير المساوية لقيمة nodata.
  • ST_CountAgg — دالة تجميعية. تُعيد عدد البكسلات في نطاق معيّن من مجموعة رسترات. إذا لم يُحدَّد نطاق فالافتراضي هو النطاق 1. إذا ضُبط exclude_nodata_value على true، فستُعدّ فقط البكسلات غير المساوية لقيمة NODATA.
  • ST_Histogram — تُعيد مجموعة من السجلات تلخّص توزيع بيانات رستر أو تغطية رستر على فئات (bins) منفصلة. يُحسب عدد الفئات تلقائيًا إذا لم يُحدَّد.
  • ST_Quantile — تحسب الكميّات (quantiles) لرستر أو لتغطية جدول رستر في سياق العينة أو المجتمع الإحصائي. وبذلك يمكن فحص ما إذا كانت قيمة ما تقع عند المئين 25% أو 50% أو 75% من الرستر.
  • ST_SummaryStats — تُعيد summarystats المكوّنة من count وsum وmean وstddev وmin وmax لنطاق رستر معيّن من رستر أو تغطية رستر. يُفترض النطاق 1 إذا لم يُحدَّد نطاق.
  • ST_SummaryStatsAgg — دالة تجميعية. تُعيد summarystats المكوّنة من count وsum وmean وstddev وmin وmax لنطاق رستر معيّن من مجموعة رسترات. يُفترض النطاق 1 إذا لم يُحدَّد نطاق.
  • ST_ValueCount — تُعيد مجموعة من السجلات تحتوي على قيمة نطاق البكسل وعدد البكسلات في نطاق معيّن من رستر (أو تغطية رستر) التي تملك مجموعة معيّنة من القيم. إذا لم يُحدَّد نطاق فالافتراضي هو النطاق 1. افتراضيًا لا تُعدّ البكسلات ذات قيمة nodata، وتُخرَج جميع القيم الأخرى في البكسل، وتُقرَّب قيم نطاق البكسل إلى أقرب عدد صحيح.

11.10. مُدخلات الرستر

  • ST_RastFromWKB — تُعيد قيمة رستر من رستر بصيغة Well-Known Binary (WKB).
  • ST_RastFromHexWKB — تُعيد قيمة رستر من تمثيل ست عشري (Hex) لرستر بصيغة Well-Known Binary (WKB).

11.11. مُخرجات الرستر

  • ST_AsBinary/ST_AsWKB — تُعيد تمثيل Well-Known Binary (WKB) للرستر.
  • ST_AsHexWKB — تُعيد تمثيل Well-Known Binary (WKB) للرستر في صورة ست عشرية (Hex).
  • ST_AsGDALRaster — تُعيد بلاطة الرستر بصيغة رستر GDAL المحددة. صيغ الرستر هي إحدى الصيغ التي تدعمها المكتبة المُترجَمة لديك. استخدم ST_GDALDrivers() للحصول على قائمة بالصيغ التي تدعمها مكتبتك.
  • ST_AsJPEG — تُعيد النطاقات المحددة من بلاطة الرستر كصورة واحدة بصيغة Joint Photographic Exports Group (JPEG) (مصفوفة بايتات). إذا لم يُحدَّد نطاق وكان هناك نطاق واحد أو أكثر من 3 نطاقات، فيُستخدم النطاق الأول فقط. وإذا كانت هناك 3 نطاقات فقط فتُستخدم النطاقات الثلاثة جميعًا وتُربط بـ RGB.
  • ST_AsPNG — تُعيد النطاقات المحددة من بلاطة الرستر كصورة واحدة بصيغة Portable Network Graphics (PNG) (مصفوفة بايتات). إذا كان في الرستر 1 أو 3 أو 4 نطاقات ولم تُحدَّد نطاقات، فتُستخدم جميع النطاقات. وإذا كان هناك نطاقان أو أكثر من 4 نطاقات ولم تُحدَّد نطاقات، فيُستخدم النطاق 1 فقط. تُربط النطاقات بفضاء RGB أو RGBA.
  • ST_AsTIFF — تُعيد النطاقات المحددة من الرستر كصورة TIFF واحدة (مصفوفة بايتات). إذا لم يُحدَّد نطاق أو كان أي من النطاقات المحددة غير موجود في الرستر، فستحاول استخدام جميع النطاقات.

11.12. معالجة الرستر: جبر الخرائط (Map Algebra)

  • ST_Clip — تُعيد الرستر مقصوصًا بالشكل الهندسي المُدخل. إذا لم يُحدَّد رقم النطاق، فتُعالَج جميع النطاقات. إذا لم يُحدَّد crop أو كان TRUE، فيُقتطع الرستر الناتج. إذا ضُبط touched على TRUE، فتُضمَّن البكسلات الملامِسة، وإلا فلا يُضمَّن البكسل إلا إذا وقع مركزه داخل الشكل الهندسي.
  • ST_ColorMap — تُنشئ رسترًا جديدًا يضم حتى أربعة نطاقات من نوع 8BUI (تدرّج رمادي، RGB، RGBA) من الرستر المصدر ونطاق محدد. يُفترض النطاق 1 إذا لم يُحدَّد.
  • ST_Grayscale — تُنشئ رسترًا جديدًا بنطاق 8BUI واحد من الرستر المصدر والنطاقات المحددة التي تمثل الأحمر والأخضر والأزرق
  • ST_Intersection — تُعيد رسترًا أو مجموعة من أزواج (شكل هندسي-قيمة بكسل) تمثل الجزء المشترك بين رسترين أو التقاطع الهندسي بين تحويل الرستر إلى متجهات وشكل هندسي.
  • ST_MapAlgebra (callback function version) — نسخة دالة الاستدعاء الراجع (callback) - تُعيد رسترًا بنطاق واحد انطلاقًا من رستر مُدخل واحد أو أكثر وفهارس نطاقات ودالة استدعاء راجع واحدة يحددها المستخدم.
  • ST_MapAlgebra (expression version) — نسخة التعبير - تُعيد رسترًا بنطاق واحد انطلاقًا من رستر مُدخل واحد أو اثنين وفهارس نطاقات وتعبير SQL واحد أو أكثر يحدده المستخدم.
  • ST_MapAlgebraExpr — نسخة نطاق رستر واحد: تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق عملية جبرية صالحة في PostgreSQL على نطاق الرستر المُدخل وبنوع البكسل المقدَّم. يُفترض النطاق 1 إذا لم يُحدَّد نطاق.
  • ST_MapAlgebraExpr — نسخة نطاقي رستر: تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق عملية جبرية صالحة في PostgreSQL على نطاقي الرسترين المُدخلين وبنوع البكسل المقدَّم. يُفترض النطاق 1 من كل رستر إذا لم تُحدَّد أرقام النطاقات. سيُحاذى الرستر الناتج (المقياس والانحراف وأركان البكسلات) على الشبكة التي يعرّفها الرستر الأول، ويتحدد امتداده بالمعامل «extenttype». يمكن أن تكون قيم «extenttype»: INTERSECTION وUNION وFIRST وSECOND.
  • ST_MapAlgebraFct — نسخة النطاق الواحد - تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق دالة PostgreSQL صالحة على نطاق الرستر المُدخل وبنوع البكسل المقدَّم. يُفترض النطاق 1 إذا لم يُحدَّد نطاق.
  • ST_MapAlgebraFct — نسخة النطاقين - تُنشئ رسترًا جديدًا بنطاق واحد يتكون بتطبيق دالة PostgreSQL صالحة على نطاقي الرسترين المُدخلين وبنوع البكسل المقدَّم. يُفترض النطاق 1 إذا لم يُحدَّد نطاق. نوع الامتداد الافتراضي هو INTERSECTION إذا لم يُحدَّد.
  • ST_MapAlgebraFctNgb — نسخة النطاق الواحد: جبر الخرائط بالجار الأقرب باستخدام دالة PostgreSQL يعرّفها المستخدم. تُعيد رسترًا تكون قيمه ناتج دالة مستخدم بلغة PLPGSQL تتضمن جوارًا من القيم من نطاق الرستر المُدخل.
  • ST_Reclass — تُنشئ رسترًا جديدًا يتكون من أنواع نطاقات مُعاد تصنيفها من الأصل. nband هو النطاق المراد تغييره. إذا لم يُحدَّد nband فيُفترض أنه 1. تُعاد جميع النطاقات الأخرى دون تغيير. حالة الاستخدام: تحويل نطاق 16BUI إلى 8BUI وما إلى ذلك لتسهيل العرض بصيغ قابلة للعرض.
  • ST_ReclassExact — تُنشئ رسترًا جديدًا يتكون من نطاقات مُعاد تصنيفها من الأصل، باستخدام ربط واحد لواحد (1:1) من القيم في النطاق الأصلي إلى قيم جديدة في النطاق الهدف.
  • ST_Union — تُعيد اتحاد مجموعة من بلاطات الرستر في رستر واحد يتكون من نطاق واحد أو أكثر.

11.13. دوال الاستدعاء المدمجة للجبر الخرائطي (Map Algebra)

  • ST_Distinct4ma — دالة معالجة رستر تحسب عدد قيم البكسلات الفريدة في جوار.
  • ST_InvDistWeight4ma — دالة معالجة رستر تستكمل قيمة بكسل من جوار ذلك البكسل.
  • ST_Max4ma — دالة معالجة رستر تحسب القيمة العظمى للبكسلات في جوار.
  • ST_Mean4ma — دالة معالجة رستر تحسب متوسط قيم البكسلات في جوار.
  • ST_Min4ma — دالة معالجة رستر تحسب القيمة الدنيا للبكسلات في جوار.
  • ST_MinDist4ma — دالة معالجة رستر تُعيد أقصر مسافة (بعدد البكسلات) بين البكسل المعني وبكسل مجاور ذي قيمة.
  • ST_Range4ma — دالة معالجة رستر تحسب مدى قيم البكسلات في جوار.
  • ST_StdDev4ma — دالة معالجة رستر تحسب الانحراف المعياري لقيم البكسلات في جوار.
  • ST_Sum4ma — دالة معالجة رستر تحسب مجموع جميع قيم البكسلات في جوار.

11.14. معالجة الرستر: نموذج الارتفاع الرقمي DEM (الارتفاع)

  • ST_Aspect — تُعيد الاتجاه (Aspect) (بالدرجات افتراضيًا) لنطاق رستر ارتفاعات. مفيدة لتحليل التضاريس.
  • ST_HillShade — تُعيد الإضاءة الافتراضية لنطاق رستر ارتفاعات باستخدام مُدخلات السمت والارتفاع والسطوع والمقياس المُعطاة.
  • ST_Roughness — تُعيد رسترًا يحتوي على «الخشونة» المحسوبة لنموذج ارتفاع رقمي DEM.
  • ST_Slope — تُعيد الانحدار (بالدرجات افتراضيًا) لنطاق رستر ارتفاعات. مفيدة لتحليل التضاريس.
  • ST_TPI — تُعيد رسترًا يحتوي على مؤشر الموقع الطبوغرافي (TPI) المحسوب.
  • ST_TRI — تُعيد رسترًا يحتوي على مؤشر وعورة التضاريس (TRI) المحسوب.
  • ST_InterpolateRaster — تستكمل سطحًا شبكيًا استنادًا إلى مجموعة مُدخلة من النقاط ثلاثية الأبعاد، مستخدمةً قيم X وY لتحديد مواضع النقاط على الشبكة وقيمة Z للنقاط بوصفها ارتفاع السطح.
  • ST_Contour — تولّد مجموعة من خطوط الكنتور المتجهية من نطاق الرستر المُعطى، باستخدام خوارزمية الكنتور في GDAL.

11.15. معالجة الرستر: من رستر إلى شكل هندسي

  • Box3D — تُعيد تمثيل box3d للصندوق المحيط بالرستر.
  • ST_ConvexHull — تُعيد الشكل الهندسي للغلاف المحدب للرستر بما في ذلك البكسلات ذات القيم المساوية لـ BandNoDataValue. بالنسبة للرسترات منتظمة الشكل وغير المائلة، يعطي هذا النتيجة نفسها التي تعطيها ST_Envelope، لذا فهو مفيد فقط للرسترات غير منتظمة الشكل أو المائلة.
  • ST_DumpAsPolygons — تُعيد مجموعة من صفوف geomval ‏(geom,val) من نطاق رستر مُعطى. إذا لم يُحدَّد رقم النطاق، فالقيمة الافتراضية لرقم النطاق هي 1.
  • ST_Envelope — تُعيد التمثيل المضلعي لامتداد الرستر.
  • ST_MinConvexHull — تُعيد الشكل الهندسي للغلاف المحدب للرستر مع استبعاد بكسلات NODATA.
  • ST_Polygon — تُعيد شكلًا هندسيًا من نوع multipolygon يتكوّن من اتحاد البكسلات التي لا تساوي قيمتها قيمة NODATA. إذا لم يُحدَّد رقم النطاق، فالقيمة الافتراضية لرقم النطاق هي 1.
  • ST_IntersectionFractions — تحسب نسبة كل خلية رستر التي يغطيها شكل هندسي مُعطى.

11.16. معاملات الرستر

  • && — تُعيد TRUE إذا كان المستطيل المحيط بـ A يتقاطع مع المستطيل المحيط بـ B.
  • &< — تُعيد TRUE إذا كان المستطيل المحيط بـ A يقع إلى يسار المستطيل المحيط بـ B.
  • &> — تُعيد TRUE إذا كان المستطيل المحيط بـ A يقع إلى يمين المستطيل المحيط بـ B.
  • = — تُعيد TRUE إذا كان المستطيل المحيط بـ A مطابقًا للمستطيل المحيط بـ B. تستخدم مستطيلًا محيطًا بدقة مضاعفة (double precision).
  • @ — تُعيد TRUE إذا كان المستطيل المحيط بـ A محتوى داخل المستطيل المحيط بـ B. تستخدم مستطيلًا محيطًا بدقة مضاعفة (double precision).
  • ~= — تُعيد TRUE إذا كان المستطيل المحيط لـ A مطابقًا للمستطيل المحيط لـ B.
  • ~ — تُعيد TRUE إذا كان المستطيل المحيط بـ A يحتوي المستطيل المحيط بـ B. تستخدم مستطيلًا محيطًا بدقة مضاعفة (double precision).

11.17. العلاقات المكانية بين الرسترات ونطاقات الرستر

  • ST_Contains — تُعيد true إذا لم تقع أي نقطة من الرستر rastB خارج الرستر rastA، ووقعت نقطة واحدة على الأقل من داخل rastB في داخل rastA.
  • ST_ContainsProperly — تُعيد true إذا كان rastB يتقاطع مع داخل rastA وليس مع حدوده أو خارجه.
  • ST_Covers — تُعيد true إذا لم تقع أي نقطة من الرستر rastB خارج الرستر rastA.
  • ST_CoveredBy — تُعيد true إذا لم تقع أي نقطة من الرستر rastA خارج الرستر rastB.
  • ST_Disjoint — تُعيد true إذا كان الرستر rastA لا يتقاطع مكانيًا مع rastB.
  • ST_Intersects — تُعيد true إذا كان الرستر rastA يتقاطع مكانيًا مع الرستر rastB.
  • ST_Overlaps — تُعيد true إذا كان الرستران rastA وrastB يتقاطعان لكن أحدهما لا يحتوي الآخر احتواءً كاملًا.
  • ST_Touches — تُعيد true إذا كان للرسترين rastA وrastB نقطة مشتركة واحدة على الأقل لكن داخليهما لا يتقاطعان.
  • ST_SameAlignment — تُعيد true إذا كان للرسترات الميل والمقياس والمرجع المكاني والإزاحة نفسها (بحيث يمكن وضع البكسلات على الشبكة نفسها دون قطع البكسلات)، وتُعيد false إذا لم تكن كذلك مع إشعار يوضح المشكلة.
  • ST_NotSameAlignmentReason — تُعيد نصًا يوضح ما إذا كانت الرسترات متحاذية، وإن لم تكن متحاذية فسبب ذلك.
  • ST_Within — تُعيد true إذا لم تقع أي نقطة من الرستر rastA خارج الرستر rastB، ووقعت نقطة واحدة على الأقل من داخل rastA في داخل rastB.
  • ST_DWithin — تُعيد true إذا كان الرستران rastA وrastB ضمن المسافة المحددة أحدهما من الآخر.
  • ST_DFullyWithin — تُعيد true إذا كان الرستران rastA وrastB ضمن المسافة المحددة أحدهما من الآخر بالكامل.

11.18. نصائح الرستر

خلاصة

يوثّق هذا القسم عددًا من المزالق والنصائح المتعلقة بـ PostGIS Raster.

11.18.1. الرسترات خارج قاعدة البيانات (Out-DB)

11.18.1.1. دليل يحتوي على ملفات كثيرة

عندما يفتح GDAL ملفًا، فإنه يفحص مسبقًا دليل ذلك الملف لبناء فهرس بالملفات الأخرى. إذا احتوى هذا الدليل على ملفات كثيرة (مثل الآلاف أو الملايين)، يصبح فتح ذلك الملف بطيئًا للغاية (خاصةً إذا كان الملف على محرك أقراص شبكي مثل NFS).

للتحكم في هذا السلوك، يوفر GDAL متغير البيئة التالي: GDAL_DISABLE_READDIR_ON_OPEN. عيّن GDAL_DISABLE_READDIR_ON_OPEN إلى TRUE لتعطيل فحص الدليل.

في Ubuntu (بافتراض أنك تستخدم حزم PostgreSQL الخاصة بـ Ubuntu)، يمكن تعيين GDAL_DISABLE_READDIR_ON_OPEN في /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/environment (حيث POSTGRESQL_VERSION هو إصدار PostgreSQL، مثل 9.6، وCLUSTER_NAME هو اسم العنقود، مثل maindb). ويمكنك أيضًا تعيين متغيرات بيئة PostGIS هنا.

# environment variables for postmaster process
# This file has the same syntax as postgresql.conf:
#  VARIABLE = simple_value
#  VARIABLE2 = 'any value!'
# I. e. you need to enclose any value which does not only consist of letters,
# numbers, and '-', '_', '.' in single quotes. Shell commands are not
# evaluated.
POSTGIS_GDAL_ENABLED_DRIVERS = 'ENABLE_ALL'

POSTGIS_ENABLE_OUTDB_RASTERS = 1

GDAL_DISABLE_READDIR_ON_OPEN = 'TRUE'
                    

11.18.1.2. الحد الأقصى لعدد الملفات المفتوحة

يكون الحد الأقصى لعدد الملفات المفتوحة المسموح به في Linux وPostgreSQL متحفظًا عادةً (غالبًا 1024 ملفًا مفتوحًا لكل عملية) على افتراض أن النظام يستخدمه مستخدمون بشريون. أما مع الرسترات خارج قاعدة البيانات (Out-DB)، فقد يتجاوز استعلام واحد صالح هذا الحد بسهولة (مثل مجموعة بيانات من رسترات تغطي 10 سنوات، برستر واحد لكل يوم يحتوي على درجات الحرارة الدنيا والعظمى، ونريد معرفة القيمة الدنيا والعظمى المطلقة لبكسل في مجموعة البيانات تلك).

أسهل تغيير يمكن إجراؤه هو إعداد PostgreSQL التالي: max_files_per_process. القيمة الافتراضية 1000، وهي منخفضة جدًا بالنسبة للرسترات خارج قاعدة البيانات. قد تكون القيمة 65536 قيمة بداية آمنة، لكن ذلك يعتمد فعليًا على مجموعات بياناتك والاستعلامات المنفّذة عليها. لا يمكن ضبط هذا الإعداد إلا عند بدء تشغيل الخادم، وغالبًا فقط في ملف إعدادات PostgreSQL (مثل /etc/postgresql/POSTGRESQL_VERSION/CLUSTER_NAME/postgresql.conf في بيئات Ubuntu).

...
# - Kernel Resource Usage -

max_files_per_process = 65536           # min 25
                                        # (change requires restart)
...
                    

التغيير الأساسي الواجب إجراؤه هو حدود الملفات المفتوحة في نواة Linux. ولهذا جزءان:

  • الحد الأقصى لعدد الملفات المفتوحة للنظام بأكمله

  • الحد الأقصى لعدد الملفات المفتوحة لكل عملية

11.18.1.2.1. الحد الأقصى لعدد الملفات المفتوحة للنظام بأكمله

يمكنك فحص الحد الأقصى الحالي لعدد الملفات المفتوحة للنظام بأكمله كما في المثال التالي:

$ sysctl -a | grep fs.file-max
fs.file-max = 131072
                    

إذا لم تكن القيمة المُعادة كبيرة بما يكفي، فأضف ملفًا إلى /etc/sysctl.d/ كما في المثال التالي:

$ echo "fs.file-max = 6145324" >> /etc/sysctl.d/fs.conf

$ cat /etc/sysctl.d/fs.conf
fs.file-max = 6145324

$ sysctl -p --system
* Applying /etc/sysctl.d/fs.conf ...
fs.file-max = 2097152
* Applying /etc/sysctl.conf ...

$ sysctl -a | grep fs.file-max
fs.file-max = 6145324
                    
11.18.1.2.2. الحد الأقصى لعدد الملفات المفتوحة لكل عملية

نحتاج إلى زيادة الحد الأقصى لعدد الملفات المفتوحة لكل عملية لعمليات خادم PostgreSQL.

لمعرفة الحد الأقصى لعدد الملفات المفتوحة الذي تستخدمه عمليات خدمة PostgreSQL حاليًا، اتبع المثال التالي (تأكد من أن PostgreSQL قيد التشغيل):

$ ps aux | grep postgres
postgres 31713  0.0  0.4 179012 17564 pts/0    S    Dec26   0:03 /home/dustymugs/devel/postgresql/sandbox/10/usr/local/bin/postgres -D /home/dustymugs/devel/postgresql/sandbox/10/pgdata
postgres 31716  0.0  0.8 179776 33632 ?        Ss   Dec26   0:01 postgres: checkpointer process
postgres 31717  0.0  0.2 179144  9416 ?        Ss   Dec26   0:05 postgres: writer process
postgres 31718  0.0  0.2 179012  8708 ?        Ss   Dec26   0:06 postgres: wal writer process
postgres 31719  0.0  0.1 179568  7252 ?        Ss   Dec26   0:03 postgres: autovacuum launcher process
postgres 31720  0.0  0.1  34228  4124 ?        Ss   Dec26   0:09 postgres: stats collector process
postgres 31721  0.0  0.1 179308  6052 ?        Ss   Dec26   0:00 postgres: bgworker: logical replication launcher

$ cat /proc/31718/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             15738                15738                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       15738                15738                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
                    

في المثال أعلاه، فحصنا حد الملفات المفتوحة للعملية 31718. لا يهم أي عملية من عمليات PostgreSQL، فأي منها تفي بالغرض. الاستجابة التي تهمنا هي Max open files.

نريد زيادة Soft Limit وHard Limit الخاصين بـ Max open files لتكون أكبر من القيمة التي حددناها لإعداد PostgreSQL ‏max_files_per_process. في مثالنا، عيّنّا max_files_per_process إلى 65536.

في Ubuntu (بافتراض أنك تستخدم حزم PostgreSQL الخاصة بـ Ubuntu)، أسهل طريقة لتغيير Soft Limit وHard Limit هي تحرير /etc/init.d/postgresql ‏(SysV) أو /lib/systemd/system/postgresql*.service ‏(systemd).

لنتناول أولًا حالة SysV في Ubuntu، حيث نضيف ulimit -H -n 262144 وulimit -n 131072 إلى /etc/init.d/postgresql.

...
case "$1" in
    start|stop|restart|reload)
        if [ "$1" = "start" ]; then
            create_socket_directory
        fi
    if [ -z "`pg_lsclusters -h`" ]; then
        log_warning_msg 'No PostgreSQL clusters exist; see "man pg_createcluster"'
        exit 0
    fi

    ulimit -H -n 262144
    ulimit -n 131072

    for v in $versions; do
        $1 $v || EXIT=$?
    done
    exit ${EXIT:-0}
        ;;
    status)
...

والآن لنتناول حالة systemd في Ubuntu. سنضيف LimitNOFILE=131072 إلى كل ملف /lib/systemd/system/postgresql*.service في القسم [Service].

...
[Service]

LimitNOFILE=131072

...

[Install]
WantedBy=multi-user.target
...

بعد إجراء تغييرات systemd اللازمة، تأكد من إعادة تحميل الخدمة (daemon)

systemctl daemon-reload