تحسين وقت تنفيذ البرامج النصية لمحرك Google Earth
يعد Google Earth Engine (GEE) منصة قوية لتحليل البيانات الجغرافية المكانية واسعة النطاق. ومع ذلك، غالبًا ما يواجه المستخدمون مشكلات تتعلق بوقت التنفيذ، حتى عندما تظهر البرامج النصية الخاصة بهم أساسية. يمكن أن يؤثر البرنامج النصي الذي يستغرق تشغيله عدة دقائق على الإنتاجية ويؤخر الرؤى.
في هذه الحالة، قام المستخدم بإنشاء برنامج نصي بسيط لمعالجة بيانات Sentinel وLandsat 8. على الرغم من بساطته، يستغرق تنفيذ النص حوالي 3-5 دقائق. يعد فهم سبب حدوث ذلك وكيفية تحسين البرنامج النصي أمرًا ضروريًا لمعالجة البيانات بكفاءة.
يعتمد أداء البرنامج النصي GEE على عدة عوامل، بما في ذلك حجم البيانات والتصفية والتعقيد الحسابي. يتضمن تقليل وقت التنفيذ تحديد الاختناقات داخل البرنامج النصي، مثل العمليات غير الضرورية أو مجموعات البيانات الكبيرة التي تؤدي إلى إبطاء المعالجة.
ستستكشف هذه المقالة الأسباب المحتملة لأوقات التنفيذ البطيئة في GEE وستقدم نصائح عملية لتحسين البرنامج النصي المحدد. ومن خلال تنفيذ هذه الاستراتيجيات، يمكن للمستخدمين تحسين سرعة وأداء مهام تحليل البيانات الجغرافية المكانية بشكل كبير.
يأمر | مثال للاستخدام |
---|---|
normalizedDifference() | تُستخدم هذه الوظيفة لحساب المؤشرات مثل NDVI وNDWI وNDSI عن طريق حساب الفرق بين النطاقين مقسومًا على مجموعهما. إنه خاص بتحليل الاستشعار عن بعد حيث تكون هناك حاجة إلى مؤشرات للنباتات والمياه والثلوج. |
filterBounds() | يقوم بتصفية مجموعة صور لتشمل فقط الصور التي تتقاطع مع شكل هندسي معين. وفي هذه الحالة، فإنه يقيد بيانات القمر الصناعي إلى المنطقة المحيطة بنقطة الاهتمام المحددة، مما يجعل المعالجة أكثر كفاءة من خلال استبعاد البيانات غير ذات الصلة. |
filterDate() | يحدد هذا الأمر مجموعة الصور بنطاق زمني محدد. بالنسبة لمشكلتنا، من المهم تحليل الاختلافات بين نفس الفترة الزمنية لمجموعات بيانات Sentinel وLandsat. |
addBands() | يضيف نطاقات محسوبة جديدة (مثل NDVI، وNDWI، وNDSI) إلى كل صورة في المجموعة. يعد هذا ضروريًا لتطبيق مؤشرات متعددة على نفس مجموعة الصور دون إنشاء مجموعات بيانات منفصلة. |
unmask() | يملأ وحدات البكسل المقنعة بقيمة محددة. في نصنا، يتم استخدامه لكشف مناطق المياه الدائمة، مما يضمن معالجة البيانات بشكل متسق في جميع أنحاء المنطقة. |
reduce() | يقلل مجموعة صور باستخدام دالة تصغير محددة، مثل ee.Reducer.percentile(). هنا، يتم استخدامه لحساب النسبة المئوية الثلاثين لقيم البكسل، مما يؤدي إلى تحسين إنشاء الصور المركبة. |
clip() | يقوم بقص الصورة إلى حدود المنطقة المحددة محل الاهتمام. وهذا يضمن معالجة البيانات ذات الصلة بالمنطقة فقط، مما يؤدي إلى تسريع التنفيذ. |
gt() | يرمز هذا الأمر إلى "أكبر من" ويستخدم لإنشاء صور ثنائية بناءً على العتبة. وفي هذه الحالة يتم تحديد المناطق التي تزيد فيها نسبة المياه عن 80%. |
map() | تطبيق دالة على كل صورة في المجموعة. في مثالنا، يتم تطبيق وظيفة addIndices لحساب NDVI وNDWI وNDSI عبر جميع الصور في المجموعة، مما يؤدي إلى تبسيط سير العمل. |
تحسين البرامج النصية GEE لتحسين الكفاءة
في النص المقدم، الهدف هو استخراج ومعالجة صور الأقمار الصناعية من مصدرين مختلفين: Sentinel وLandsat. ال محرك جوجل إيرث (GEE) تتيح المنصة للمستخدمين الوصول إلى كميات هائلة من بيانات الأقمار الصناعية وتطبيق عمليات مختلفة مثل التصفية والفهرسة والتصور. إحدى الميزات الرئيسية المستخدمة في هذا البرنامج النصي هي تطبيع الفرق () وظيفة، والتي يتم استخدامها لحساب المؤشرات الهامة مثل NDVI، NDWI، وNDSI. تعتبر هذه المؤشرات حاسمة لتحليل الغطاء النباتي والمياه والثلوج في المنطقة المحددة. يبدأ البرنامج النصي بتحديد نقطة الاهتمام ويركز الخريطة عليها باستخدام الإحداثيات المتوفرة.
يطبق البرنامج النصي مرشحات متعددة، مثل تاريخ التصفية () و تصفية الحدود ()، لتقليل كمية البيانات التي تتم معالجتها، وبالتالي تحسين وقت التنفيذ. على سبيل المثال، تصفية الحدود () يضمن تضمين الصور المتقاطعة مع منطقة الاهتمام فقط، بينما تاريخ التصفية () يحد الصور إلى نطاق زمني محدد. يعد هذا أمرًا ضروريًا لمعالجة مجموعات البيانات الكبيرة مثل صور Sentinel وLandsat، لأنه يقلل من العبء الحسابي. بالإضافة إلى ذلك، فلتر تساعد التغطية السحابية على التخلص من الصور التي تحتوي على قدر كبير جدًا من السحابة، مما يضمن تحليلًا أفضل جودة.
أحد الجوانب المهمة في البرنامج النصي هو إضافة النطاقات () الوظيفة، التي تضيف المؤشرات المحسوبة (NDVI، NDWI، NDSI) إلى الصور، مما يجعلها في متناول الجميع لمزيد من التحليل. يتضمن البرنامج النصي أيضًا قناعًا مائيًا دائمًا باستخدام بيانات من مجموعة بيانات JRC Global Surface Water. يساعد القناع المائي في استبعاد المناطق التي بها نسبة عالية من المياه (أكثر من 80%)، والتي يمكن أن تؤدي إلى تحريف نتائج تحليل الغطاء النباتي والثلوج. ويتم ذلك من خلال جي تي () و كشف القناع () الوظائف، والتي تسمح للبرنامج النصي بعزل المناطق بناءً على قيم البكسل.
وأخيرا، يستخدم البرنامج النصي يقلل() وظيفة مع المخفض المئوي لإنشاء صورة مركبة تمثل النسبة المئوية الثلاثين لقيم البكسل المحددة. يتم بعد ذلك قص هذه الصورة المركبة إلى المنطقة محل الاهتمام وإظهارها على الخريطة باستخدام مقطع () وظيفة. يتم تحديد المعلمات المرئية لكل من مركبات Sentinel وLandsat، مما يسمح للمستخدم بمشاهدتها باستخدام إعدادات الألوان المناسبة. من خلال الجمع بين خطوات معالجة الصور المختلفة مثل التصفية والإخفاء والتوليد المركب، يوفر هذا البرنامج النصي طريقة فعالة لتحليل صور القمر الصناعي، على الرغم من أنه يمكن تطبيق المزيد من التحسين لتقليل أوقات التنفيذ.
تحسين تنفيذ البرنامج النصي لمحرك Google Earth لمعالجة أسرع
يستخدم هذا الحل محرك Google Earth (GEE) مع التركيز على تحسين الأداء عن طريق تقليل أوقات استرجاع البيانات وتبسيط العمليات. يتم استخدام جافا سكريبت كلغة البرمجة النصية.
var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));
استخدام المعالجة الفعالة للبيانات لـ GEE لتقليل تأخيرات البرنامج النصي
يدمج هذا الحل المعالجة الأمثل للبيانات من خلال الجمع بين حسابات المؤشرات والعتبات. يتم تطبيق JavaScript لمعالجة Google Earth Engine.
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);
تحسين كفاءة مخطوطات الاستشعار عن بعد
أحد الاعتبارات الرئيسية عند العمل مع البرامج النصية لـ Google Earth Engine (GEE) هو ضمان معالجة العمليات بكفاءة. في حين أن استخدام مجموعات البيانات الكبيرة مثل Sentinel وLandsat أمر شائع في التحليل البيئي، إلا أن الحجم الهائل للبيانات يمكن أن يبطئ تنفيذ البرنامج النصي. تتمثل إحدى طرق تحسين الأداء في التأكد من معالجة البيانات الضرورية فقط. باستخدام أوامر مثل تصفية الحدود () و تاريخ التصفية () يقلل من حجم مجموعة البيانات، مما يساعد على تبسيط العمليات الحسابية. يمكن أن يؤدي تحديد نطاقات زمنية ومناطق جغرافية محددة إلى تقليل وقت التنفيذ بشكل كبير.
هناك جانب آخر يؤثر على أداء البرنامج النصي GEE وهو كيفية معالجة البيانات. يستخدم مثال البرنامج النصي دالة لحساب المؤشرات المهمة مثل NDVI وNDWI وNDSI. تتم إضافة هذه المؤشرات كنطاقات إلى مجموعات الصور، مما يسمح بإجراء تحليل أكثر شمولاً. ومع ذلك، هناك خطأ شائع وهو تطبيق مثل هذه الوظائف على مجموعة بيانات بأكملها دون التصفية أولاً. من الضروري تطبيق مثل هذه العمليات بعد التصفية لتجنب الحسابات غير الضرورية على البيانات غير ذات الصلة.
التصور هو عنصر آخر من عناصر البرنامج النصي الذي يمكن تحسينه. يمكن أن تؤدي إضافة عدد كبير جدًا من الطبقات أو المرئيات المعقدة إلى تأخير وقت المعالجة. يستخدم البرنامج النصي معلمات مرئية محددة مسبقًا لعرض المركبات، ولكن يمكن تحسين الأداء عن طريق تعطيل طبقات معينة ما لم تكن هناك حاجة إليها بشكل صريح. يساعد هذا في الحفاظ على البرنامج النصي خفيف الوزن مع الحفاظ على وظائفه. استخدام مقطع () تضمن الأوامر أيضًا عرض المنطقة الضرورية فقط، مما يقلل من عبء المعالجة الإجمالي.
الأسئلة المتداولة حول تحسين البرامج النصية لمحرك Google Earth
- كيف يمكنني تحسين أداء نصوص GEE الخاصة بي؟
- الاستخدام الأمثل ل filterDate(), filterBounds()، وتقليل حجم مجموعة البيانات الخاصة بك قبل المعالجة.
- لماذا يستغرق تشغيل برنامج GEE النصي وقتًا طويلاً؟
- يمكن لمجموعات البيانات الكبيرة والحسابات المعقدة أن تؤدي إلى إبطاء التنفيذ. يستخدم reduce() و clip() لقصر المعالجة على المناطق ذات الصلة.
- هل يمكنني تقليل عدد الصور المعالجة في GEE؟
- نعم بالتقديم filter() للتغطية السحابية و filterDate() للتركيز على فترات محددة.
- كيف يمكنني تبسيط حسابات الفهرس في البرنامج النصي الخاص بي؟
- استخدم وظيفة مثل addBands() لتبسيط إضافة مؤشرات متعددة (على سبيل المثال، NDVI، NDWI) في خطوة واحدة.
- هل من الممكن تصور الطبقات الأساسية فقط؟
- نعم، قم بتعطيل الطبقات غير الضرورية واستخدم معلمات التصور المبسطة معها Map.addLayer() لأداء أفضل.
الأفكار النهائية حول تحسين نصوص GEE
يتضمن تحسين البرامج النصية لمحرك Google Earth التعامل بكفاءة مع مجموعات البيانات الكبيرة، وتطبيق عوامل التصفية مبكرًا، وتقليل عمليات البيانات غير الضرورية. التركيز على المجالات الأساسية مثل التصفية تاريخ والموقع يمكن أن يقلل وقت المعالجة بشكل كبير.
من خلال دمج وظائف مثل addBands وباستخدام أقنعة العتبة لإزالة البيانات غير ذات الصلة، يمكن تحسين أداء البرنامج النصي بشكل أكبر. يمكن لهذه التقنيات تبسيط التنفيذ وتقديم نتائج أسرع واستخدام أفضل لمنصة Google Earth Engine.
المصادر والمراجع لتحسين البرامج النصية لمحرك Google Earth
- تم إنشاء هذه المقالة باستخدام محتوى يستند إلى وثائق Google Earth Engine الرسمية، والتي توفر رؤى حول تقنيات تحسين البرنامج النصي. أدلة محرك جوجل إيرث
- تم جمع معلومات إضافية من منتدى مجتمع GEE، مما يوفر مناقشات وحلول لتحسين الأداء في البرامج النصية المعقدة. مجتمع محرك جوجل إيرث
- تمت الإشارة إلى أفضل الممارسات للتعامل مع مجموعات البيانات الكبيرة من مؤلفات الاستشعار عن بعد والبرامج التعليمية المتاحة على الرابط التالي. مرصد ناسا للأرض