انتقل إلى المحتوى الرئيسي

DivideTiles - معالجة التقسيم

نظرة عامة

تُستخدم واجهة DivideTiles لتقسيم المشاهد إلى بلاطات قبل إعادة البناء. تدعم هذه الواجهة طرق التقسيم ثنائي الأبعاد المنتظم وثلاثي الأبعاد المنتظم والتكيفي القائم على الذاكرة، وهي مناسبة لمعالجة مجموعات البيانات واسعة النطاق.

حالات الاستخدام
  • مجموعات البيانات فائقة الحجم (آلاف الصور)
  • بيئات المعالجة محدودة الذاكرة
  • المشاريع التي تتطلب معالجة متوازية
  • سيناريوهات الحوسبة الموزعة

كيف يعمل

استدعاء الواجهة

استدعاء سطر الأوامر

# الطريقة الأولى: من خلال المحرك الرئيسي
reconstruct_full_engine.exe -reconstruct_type 4 -task_json divide_config.json

# الطريقة الثانية: محرك التقسيم المستقل
divide_engine.exe divide_config.json

وصف المعاملات

  • reconstruct_type: ثابت كـ 4 (يشير إلى DivideTiles)
  • task_json: مسار ملف التكوين

معاملات التكوين

المعاملات المطلوبة

المعاملالنوعالوصف
working_dirstringدليل العمل (يجب أن يحتوي على نتائج AT)
gdal_folderstringمسار بيانات GDAL
resolution_levelintدقة إعادة البناء (1=عالي، 2=متوسط، 3=منخفض)
divide_parametersJSONمعاملات التقسيم
roi_for_3dJSONROI لإعادة البناء ثلاثي الأبعاد

المعاملات الاختيارية

المعاملالنوعالافتراضيالوصف
roi_coordinate_systemJSONWGS84نظام إحداثيات ROI

معاملات التقسيم (divide_parameters)

المعاملالنوعالافتراضيالوصف
divide_modeint-وضع التقسيم: 0=شبكة ثنائية الأبعاد، 1=شبكة ثلاثية الأبعاد، 2=تكيفي للذاكرة
tile_sizedouble-حجم الشبكة (مطلوب للوضع 0/1)
target_memorydouble0حد الذاكرة المستهدف (GB)
reconstruct_whole_tileboolfalseما إذا كان سيتم إعادة بناء البلاطات الكاملة (بدون قطع الحدود)
tile_systemJSONنظام إحداثيات ATنظام إحداثيات التقسيم

شرح أوضاع التقسيم

1. الشبكة المنتظمة ثنائية الأبعاد (divide_mode = 0)

مناسبة للمناطق ذات التنوع التضاريسي القليل:

{
"divide_mode": 0,
"tile_size": 500.0, // شبكة 500م × 500م
"tile_system": {
"type": 3,
"epsg_code": 32650 // نظام إحداثيات الإسقاط UTM
}
}

2. الشبكة المنتظمة ثلاثية الأبعاد (divide_mode = 1)

مناسبة للمناطق ذات التغيرات الارتفاعية الكبيرة:

{
"divide_mode": 1,
"tile_size": 300.0, // مكعب 300م × 300م × 300م
"tile_system": {
"type": 1 // نظام إحداثيات محلي
}
}

3. التقسيم التكيفي للذاكرة (divide_mode = 2)

يقسم تلقائياً بناءً على حدود الذاكرة:

{
"divide_mode": 2,
"target_memory": 16.0, // حد أقصى 16GB ذاكرة لكل بلاطة
"reconstruct_whole_tile": false
}

أمثلة التكوين الكاملة

تقسيم ثنائي الأبعاد لمشهد بحجم المدينة

{
"working_dir": "C:/Projects/CityScale",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 0,
"tile_size": 1000.0, // شبكة 1كم
"tile_system": {
"type": 3,
"epsg_code": 32650
},
"reconstruct_whole_tile": true
},
"roi_for_3d": {
"boundary": [
[500000, 2500000],
[510000, 2500000],
[510000, 2510000],
[500000, 2510000]
],
"min_z": 0,
"max_z": 500
},
"roi_coordinate_system": {
"type": 3,
"epsg_code": 32650
}
}

تقسيم ثلاثي الأبعاد للتضاريس الجبلية

{
"working_dir": "C:/Projects/Mountain",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 1,
"tile_size": 500.0, // مكعب 500م
"tile_system": {
"type": 0, // LocalENU
"origin_point": [114.123, 22.123, 100.0]
}
},
"roi_for_3d": {
"boundary": [...],
"min_z": 100,
"max_z": 2000 // اختلاف ارتفاع كبير
}
}

بيئة محدودة الذاكرة

{
"working_dir": "C:/Projects/LimitedMemory",
"gdal_folder": "C:/MipMap/SDK/data",
"resolution_level": 2,
"divide_parameters": {
"divide_mode": 2,
"target_memory": 8.0, // فقط 8GB ذاكرة متاحة
"reconstruct_whole_tile": false
},
"roi_for_3d": {
"boundary": [...]
}
}

نتائج الإخراج

بنية ملف tiles.json

ملف tiles.json المُنتج بعد التقسيم:

{
"tiles": [
{
"name": "tile_0_0",
"empty": false,
"max_memory": 12.5, // GB
"roi": {
"boundary": [...],
"min_z": 100,
"max_z": 200
}
},
{
"name": "tile_0_1",
"empty": false,
"max_memory": 15.3,
"roi": {...}
}
],
"divide_mode": 0,
"tile_system": {...},
"tile_grid": { // معلومات الشبكة (الوضع 0/1)
"origin": [500000, 2500000],
"rows": 10,
"cols": 10
},
"tile_size": 1000.0
}

استخدام نتائج التقسيم

سيقرأ Reconstruct3D تلقائياً tiles.json ويؤدي إعادة البناء المقسم:

{
"license_id": 9200,
"working_dir": "C:/Projects/CityScale", // يحتوي على tiles.json
// ... معاملات Reconstruct3D الأخرى
}

اختيار استراتيجية التقسيم

مقارنة أنواع المشاهد

نوع المشهدالوضع الموصى بهاقتراح حجم الشبكةالوصف
مدينة مسطحةشبكة ثنائية الأبعاد500-2000متضاريس مسطحة، تغيرات ارتفاع صغيرة
تضاريس جبليةشبكة ثلاثية الأبعاد300-1000ماختلافات ارتفاع كبيرة، يتطلب طبقات عمودية
مشهد مختلطتكيفي للذاكرة-تحسين مخطط التقسيم تلقائياً
هندسة خطيةشبكة ثنائية الأبعادمخصصتعيين شرائط مطولة على طول اتجاه المسار

تقدير الذاكرة

متطلب الذاكرة لكل بلاطة ≈ (الصور في البلاطة × دقة الصورة × 3) / نسبة الضغط

القيم المرجعية:

  • 100 صورة 20MP ≈ 8-12 GB
  • 200 صورة 20MP ≈ 16-24 GB

المعالجة المتوازية

التوازي المحلي

import subprocess
import json
import concurrent.futures

# قراءة نتائج التقسيم
with open("tiles.json", "r") as f:
tiles_info = json.load(f)

def process_tile(tile):
if tile["empty"]:
return

config = {
"license_id": 9200,
"working_dir": f"./output/{tile['name']}",
"tile_name": tile["name"],
# ... معاملات أخرى
}

with open(f"{tile['name']}.json", "w") as f:
json.dump(config, f)

subprocess.run([
"reconstruct_full_engine.exe",
"-reconstruct_type", "2",
"-task_json", f"{tile['name']}.json"
])

# المعالجة المتوازية
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as executor:
executor.map(process_tile, tiles_info["tiles"])

المعالجة الموزعة

يمكن توزيع نتائج التقسيم على عدة أجهزة للمعالجة:

  1. العقدة الرئيسية تؤدي التقسيم
  2. توزيع tiles.json والبيانات
  3. كل عقدة تعتني بشكل مستقل بالبلاطات المخصصة لها
  4. تجميع النتائج

أفضل الممارسات

1. اختيار حجم البلاطة

  • ذاكرة كافية: استخدم بلاطات أكبر لتقليل تأثيرات الحدود
  • ذاكرة محدودة: استخدم بلاطات أصغر لضمان الاستقرار
  • معالجة متوازية: وازن بين عدد البلاطات ووقت المعالجة لكل بلاطة

2. التعامل مع منطقة التداخل

{
"reconstruct_whole_tile": true, // إنتاج بلاطات كاملة
// دمج مناطق التداخل في المعالجة اللاحقة
}

3. اختيار نظام الإحداثيات

  • التقسيم ثنائي الأبعاد: استخدم نظام إحداثيات مُسقط (وحدات مترية)
  • التقسيم ثلاثي الأبعاد: محلي أو LocalENU
  • تجنب التقسيم ثلاثي الأبعاد في أنظمة الإحداثيات الجغرافية

4. تحسين ROI

{
"roi_for_3d": {
"boundary": [
// استخدم Smart ROI المُنتج من AT
// مد الحدود بشكل صحيح لتجنب القطع
]
}
}

تحسين الأداء

1. تقدير وقت المعالجة

الوقت الإجمالي = وقت التقسيم + max(وقت المعالجة لكل بلاطة) + وقت الدمج

2. توازن الحمولة

  • فحص توزيع max_memory
  • تعديل المعاملات لتوازن الحمولة عبر البلاطات
  • النظر في تخصيص المهام الديناميكي

3. تحسين التخزين

  • استخدم SSD لدليل العمل
  • وزع نتائج البلاطات عبر عدة أقراص
  • احجز مساحة مؤقتة كافية

المشكلات الشائعة

س: فجوات في حدود البلاطات بعد التقسيم؟

ج:

  • تعيين reconstruct_whole_tile: true
  • زيادة التداخل بين البلاطات (بتوسيع ROI)
  • تحسين الدمج في المعالجة اللاحقة

س: فشل بعض البلاطات في المعالجة؟

ج:

  • فحص ما إذا كانت max_memory للبلاطة تتجاوز الحدود
  • مراجعة توزيع الصور في بلاطات محددة
  • النظر في إعادة التقسيم أو تعديل المعاملات

س: بلاطات كثيرة جداً؟

ج:

  • زيادة tile_size أو target_memory
  • استخدام وضع تقسيم مختلف
  • النظر في استراتيجية معالجة هرمية

التطبيقات المتقدمة

مخططات التقسيم المخصصة

بناءً على tiles.json، يمكنك:

  1. تعديل حدود البلاطات يدوياً
  2. دمج البلاطات الصغيرة
  3. تقسيم البلاطات الكبيرة
  4. تعيين الأولويات

التحديثات التدريجية

# معالجة المناطق المتغيرة فقط
changed_tiles = identify_changed_areas()
for tile in changed_tiles:
process_tile(tile)

الخطوات التالية


نصيحة: الاستراتيجية الصحيحة للتقسيم هي مفتاح معالجة البيانات واسعة النطاق. يُوصى بالاختبار مع بيانات صغيرة أولاً لإيجاد المعاملات المثلى قبل معالجة مجموعات البيانات الكاملة.