كل المقالات
الذكاء الجيومكاني
28 سبتمبر 2026 · قراءة 8 دقائق · أمين عدنان قاسم

الذكاء الجيومكاني بلا خوادم: المعمارية خلف CoffeeMap.dev

مساران، وستة أنماط، وقاعدة واحدة تحدد أين يجري كل حساب

تعمل ثلاث لوحات للأقمار الصناعية على CoffeeMap.dev (مخاطر الفيضانات على النيل الأزرق، والحرارة الحضرية في الرياض، ومراقبة المحاصيل في الجوف) بلا خادم افتراضي، ولا قاعدة بيانات، ولا Python وقت التشغيل. الموقع ملفات ثابتة على استضافة مشتركة. ويجري العمل الثقيل في ثلاثة أماكن لا أديرها ولا أدفع لها مقابل كل طلب: خوادم الـtiles العامة، وسكربت يعمل دون اتصال من حين لآخر، ومتصفح الزائر نفسه.


القيد الذي شكّل كل شيء

تتبع معظم تطبيقات الويب الجيومكانية الشكل نفسه: خادم مع GDAL، وقاعدة بيانات مع PostGIS، وخادم tiles، وشيء يبقيها كلها تعمل. وهذه بنية تحتية كبيرة لمحلل واحد، أو فريق منظمة غير حكومية، أو مكتب ميداني باتصال ضعيف وبلا قسم تقنية معلومات.

لذا وضعت قاعدة واحدة لكل مشروع: لا خادم لي وقت التشغيل. كل ما تحتاجه الصفحة يجب أن يكون ملفًا ثابتًا أستضيفه، أو واجهة برمجية عامة يستطيع أي أحد استدعاءها، أو شيفرة تعمل على جهاز الزائر.

تصف المقالات الثلاث عن كل مشروع ماذا يفعل. أما هذه فتصف المعمارية التي تشترك فيها، والقرار الواحد الذي يقسمها إلى مسارين.

المعمارية في لمحة

معمارية الذكاء الجيومكاني بلا خوادم: مصادر البيانات العامة تغذي مسارين، مباشرة في المتصفح وحساب مسبق مرة واحدة، وكلاهما يصل عبر الاستضافة الثابتة إلى متصفح الزائر.

استكشف النسخة التفاعلية من هذا المخطط ←

للمخطط أربع طبقات:

  1. البيانات العامة. Microsoft Planetary Computer ‏(Sentinel-1 وSentinel-2 وLandsat وESA WorldCover)، وtiles التضاريس (AWS Terrarium وMapTiler)، وواجهات الطقس (Open-Meteo وNASA POWER)، وOpenStreetMap عبر Overpass. كلها بلا مفتاح، عدا مصادر اختيارية يجلب فيها الزائر رمزه الخاص.
  2. مسارا حوسبة. المسار أ يحسب كل شيء حيًا في المتصفح. والمسار ب يحسب مسبقًا مرة واحدة دون اتصال، ويبث الصور حية.
  3. الاستضافة الثابتة. تصدير Next.js ثابت: HTML وJavaScript وJSON ونسخ محفوظة مرفقة.
  4. متصفح الزائر. يرسم MapLibre GL الخريطة، وChart.js المخططات، وتُرسم النتائج على canvas يتطابق مع الخريطة تمامًا.

القرار الواحد: أين ينتمي هذا الحساب؟

كل حساب في هذه المشاريع يجيب عن سؤال واحد أولًا:

إن كان يعتمد على إعدادات الزائر فاحسبه في المتصفح. وإن كان واحدًا للجميع فاحسبه مرة واحدة وقدّمه ملفًا.
السؤالالمسار أ: مباشرة في المتصفحالمسار ب: حساب مسبق مرة واحدة
هل تتغير النتيجة بمدخلات المستخدم (التواريخ، العتبات، الأوزان)؟نعملا، أو يتغير العرض فقط
كم من البيانات لكل عرض؟عشرات الـtiles، نحو مليون خليةسنوات من المشاهد × آلاف الحقول
الزمن لكل عرضثوانٍ (النيل الأزرق: نحو 13 ثانية على حاسوب محمول)ساعات لو أُعيد؛ لذا يُنجز مرة واحدة
أين يجري الحساب الثقيلحساب النطاقات في خادم الـtiles + جهاز الزائرحاسوبي المحمول، من حين لآخر
ماذا تقدّم الاستضافةالتطبيقالتطبيق + ملفات JSON/GeoJSON صغيرة
المشاريعمخاطر فيضانات النيل الأزرق، الحرارة الحضرية في الرياضمراقبة المحاصيل بالذكاء الجيومكاني

المسار أ: مباشرة في المتصفح

يعيد مشروعا مخاطر فيضانات النيل الأزرق والحرارة الحضرية في الرياض حساب كل شيء في كل زيارة، فيستطيع الزوار تغيير التواريخ أو عتبات الرادار أو أوزان النموذج ورؤية النتيجة فورًا. وتجعل أربعة أنماط ذلك ممكنًا دون مكتبة نظم معلومات جغرافية واحدة في الحزمة.

النمط 1: حساب النطاقات في خادم الـtiles

تُقيّم واجهة البيانات في Planetary Computer تعبيرًا على خوادمها وتعيد tile PNG. وأستخدم ذلك لإجراء تحويل الوحدات عند المصدر وتلقي قيم لا يحتاج المتصفح إلا إلى فكها:

# Sentinel-1 backscatter to decibels (Blue Nile)
expression = 10*log10(vv);10*log10(vh);10*log10(vv)
rescale    = -35,5

# Landsat Collection 2 surface temperature to °C (Riyadh)
expression = lwir11*0.00341802+149.0-273.15
rescale    = 10,70

يُسقط rescale النطاق الفيزيائي على بايت (0–255) في قناة PNG، ويعكس المتصفح ذلك. وكلفة الدقة صغيرة ومعروفة: نحو 0.16 dB للرادار و0.24 °م للحرارة، وكلاهما أدق من ضوضاء المستشعرات نفسها.

النمط 2: فك الترميز بدقة

تدير المتصفحات ألوان الصور افتراضيًا، وهذا مثالي للصور الفوتوغرافية وخاطئ بصمت للبيانات. تُفك كل tile بيانات مع إيقاف تحويل الألوان وضرب الشفافية المسبق:

const bitmap = await createImageBitmap(blob, {
  colorSpaceConversion: 'none',
  premultiplyAlpha: 'none',
});

وتسلك tiles التضاريس المسار نفسه، بصيغ فك خاصة بها (Terrarium: ‏h = R × 256 + G + B / 256 − 32768).

النمط 3: شبكة الـtiles هي شبكة التحليل

هذا هو القرار الذي يُلغي حزمة نظم المعلومات الجغرافية. فبدل اختيار إسقاط وإعادة المعاينة إليه، يحلّل كل مشروع البيانات على شبكة بكسلات Web Mercator لمستوى تكبير واحد، وهي الشبكة التي تستخدمها tiles الخريطة أصلًا:

المشروعمستوى التكبيرحجم الخليةالشبكةالخلايا
مخاطر فيضانات النيل الأزرق9نحو 300 منحو 1,100 × 1,1301.2 مليون
الحرارة الحضرية في الرياض11نحو 70 م1,456 × 1,1171.6 مليون

كل بكسل في الـtile يقع على خلية واحدة بالضبط: لا مكتبة لإعادة الإسقاط، ولا إعادة معاينة. تُحفظ الطبقات في مصفوفات typed ‏(Float32Array وUint8Array)، نحو اثنتي عشرة طبقة في كل مرة، ضمن ذاكرة المتصفح بارتياح. وحين تجهز النتيجة، تُرسم على canvas وتُضاف إلى MapLibre مصدرَ صورة بإحداثيات أركانه الأربعة، فتتطابق تمامًا.

النمط 4: خوارزميات تتوسع خطيًا

مع مليون خلية، يصبح أي شيء أبطأ من الزمن الخطي ملحوظًا. وأدوات العمل الأساسية هي:

  • تحويلات المسافة الإقليدية الدقيقة (Felzenszwalb وHuttenlocher) في مرورين أحاديي البعد: المسافة إلى الأنهار أو الحدائق أو مظلة الأشجار، وأي معلم هو الأقرب.
  • Separable box blurs with running sums: النسب المحيطة مثل مظلة الأشجار ضمن مسافة مشي 300 م.
  • k-means بتهيئة من الكميات: بؤر حرارية قابلة للتكرار.
  • TensorFlow.js محركًا على GPU: تقييم 1.6 مليون خلية ضربَ مصفوفات واحدًا عبر WebGL، ولا يُحمَّل إلا في الصفحة التي تحتاجه.

المسار ب: حساب مسبق مرة واحدة، وبث حي

تتابع مراقبة المحاصيل في الجوف كل حقل عبر كل مشهد Sentinel-2 منذ أبريل 2023. وهذا عمل أكبر بكثير من أن يُكرر لكل زائر، والإجابة واحدة للجميع. لذا يُقسم العمل.

النمط 5: مسار دون اتصال، ومخرجات ثابتة

مسار Python يعمل دون اتصال، ويُشغَّل من حين لآخر، يتولى العمل الثقيل. تحمله ثلاث مكتبات، لكل منها مهمة واحدة: Rasterio يجلب البكسلات، وNumPy يتولى الحساب، وOpenCV يرى الأشكال.

المكتبةمهمتهاماذا تفعل في مسار الجوف
Rasterioقراءة البيانات النقطية مع إسنادها الجغرافيقراءة نوافذ من ملفات GeoTIFF المحسّنة للسحابة لـSentinel-2 عبر HTTP: المستطيل فوق الجوف فقط، نطاقًا نطاقًا (B02 وB04 وB08 وقناع الغيوم SCL)، لا المشهد كاملًا أبدًا. وتبقى كل مصفوفة مرتبطة بإحداثيات حقيقية.
NumPyالحساب على صور كاملة دفعة واحدةيزيل إزاحة +1000 ويحجّم الانعكاسية إلى 0–1، ويحسب NDVI وEVI لكل بكسل، ويطبق قناع الغيوم، ويبني مركّب أقصى NDVI، ويستخدم np.bincount لحساب متوسط بكسلات كل حقل في مرور واحد. دون حلقات على البكسلات أو الحقول.
OpenCVالرؤية الحاسوبية: إيجاد الأشكال في صورةيعامل مركّب NDVI كصورة فوتوغرافية: يجد HoughCircles المحاور المستديرة، وتنظّف العمليات المورفولوجية المساحات الخضراء المشوشة، ويفصل connectedComponentsWithStats كتل الغطاء النباتي، ويحوّلها findContours مع approxPolyDP إلى حدود مضلعات.

تتسلم المكتبات العمل من بعضها في سلسلة واحدة، يجد فيها pystac-client المشاهد أولًا، ويحوّل Shapely وpyproj الأشكال إلى مضلعات مرسومة:

pystac-client  find Sentinel-2 scenes in the STAC catalogue
  → Rasterio   read only the Al Jouf window of each band
  → NumPy      NDVI, EVI, cloud mask, maximum-NDVI composite
  → OpenCV     detect centre pivots and block fields
  → Shapely + pyproj   polygons, areas, WGS 84
  → NumPy      mean NDVI/EVI per field, per date
  → fields.geojson + timeseries.json

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

ملاحظة صريحة: OpenCV هنا رؤية حاسوبية كلاسيكية، قواعد مضبوطة يدويًا دون بيانات تدريب. وتعمل جيدًا لأن محاور الري المحوري دوائر شبه مثالية. والخطوة التالية نموذج تقسيم مدرَّب للحقول غير المنتظمة والقطاعية، مع كاشف Hough خط أساس يجب التفوق عليه.

النمط 6: إبقاء الصور حية

يخزّن المسار أرقامًا، لا صورًا. حين يحرك الزائر شريط الزمن، تطلب الخريطة من Planetary Computer tile NDVI أو EVI أو الألوان الحقيقية لذلك التاريخ، مرسومة بحساب النطاقات وخريطة ألوان على خادم الـtiles. لا يخزّن الموقع صورة قمر صناعي واحدة، ومع ذلك فكل تاريخ على بُعد طلب واحد.

التصميم لإنترنت حقيقي

الخدمات العامة مجانية، لكنها غير مضمونة. وأربع عادات تبقي اللوحات تعمل:

  • النسخ المحفوظة أولًا، والحي ثانيًا. تحمل صفحة النيل الأزرق نسخة محفوظة مرفقة لأنهار OpenStreetMap وتستبدلها ببيانات Overpass الحية حين يستجيب أحد الخوادم. ورأيت أثناء التطوير أخطاء 504 واستجابة استغرقت 85 ثانية.
  • قل حين لا توجد بيانات. تغطية Sentinel-1 فوق السودان متقطعة في بعض السنوات، لذا تبلّغ الصفحة عن الفترات الفارغة بدل رسم خريطة فارغة.
  • بيانات اعتماد الزائر تبقى معه. يجري تسجيل الدخول إلى Sentinel Hub وCopernicus Data Space في المتصفح (نقطتا الرموز تسمحان بـCORS). لا يُخزَّن شيء، ولا يظهر أي مفتاح لي في الحزمة أبدًا.
  • ادفع كلفة المكتبات الثقيلة حيث تُستخدم فقط. لا يُحمَّل TensorFlow.js ومكونات الخرائط إلا في صفحاتها.

ما لا تجيده هذه المعمارية

الصراحة بشأن المقايضات جزء من التصميم:

  • المستوى الوطني. يتعامل المتصفح مع بضعة ملايين من الخلايا، لا مع بلد كامل بدقة 10 م. ذلك العمل ينتمي إلى المسار ب.
  • جاهزية خدمات الآخرين. إن توقف Planetary Computer أو Overpass، ينتظر المسار أ. والنسخ المحفوظة تخفف ذلك ولا تلغيه.
  • حدود المعدل والاستخدام العادل. الواجهات بلا مفتاح مشتركة. ويجب على الصفحة الرائجة أن تخزّن مؤقتًا بمسؤولية وتحترم شروط كل خدمة.
  • البيانات المملوكة أو الحساسة. كل ما يتلقاه المتصفح يستطيع الزائر رؤيته. والبيانات السرية تحتاج إلى تصميم مختلف.
  • تنوع الأجهزة. يستغرق الحاسوب المحمول ثوانٍ؛ والهاتف القديم أطول. وتُختار الشبكات ومستويات التكبير مع مراعاة ذلك.

التالي: المسار ج، نماذج مدرَّبة في المتصفح

«النماذج» في هذه المشاريع اليوم قواعد شفافة ومؤشرات موزونة. وهذا مقصود في أدوات الفرز الأولي، لكن الخطوة التالية نماذج مدرَّبة، وللمعمارية مكان جاهز لها:

  1. التدريب دون اتصال على معايير مفتوحة وبيانات محلية موسومة يدويًا (شبكة U-Net لتقسيم الفيضانات، ومصنّف لأنواع المحاصيل).
  2. التصدير إلى ONNX والضغط إلى بضعة ميغابايت.
  3. تقديم النموذج ملفًا ثابتًا، كأي ملف آخر.
  4. تشغيل الاستدلال في المتصفح عبر ONNX Runtime Web على WebGPU، مع الرجوع إلى WebAssembly.

التدريب هو المسار ب؛ والاستدلال هو المسار أ. والقاعدة تبقى كما هي: لا خادم لي وقت التشغيل.

المشاريع

إن كنت تدير فريقًا يحتاج إلى تحليل صور الأقمار الصناعية دون بنية تحتية تحتاج إلى صيانة، للاستجابة الإنسانية أو الزراعة أو التخطيط الحضري، تواصل معنا على [email protected].


البيانات: Copernicus Sentinel-1 وSentinel-2 (ESA)، وLandsat 8/9 (هيئة المسح الجيولوجي الأمريكية)، وESA WorldCover عبر Microsoft Planetary Computer؛ وAWS Terrain Tiles؛ وMapTiler؛ وOpen-Meteo؛ وNASA POWER؛ و© المساهمون في OpenStreetMap.

المعمارية
ذكاء جيومكاني بلا خوادم
الاستشعار عن بعد
MapLibre
Planetary Computer
STAC
الاستضافة الثابتة
CoffeeMap.dev

نحوّل البيانات إلى رؤى جيومكانية قابلة للتنفيذ

من إعداد أمين عدنان قاسم

© 2026 CoffeeMap.dev. جميع الحقوق محفوظة.