26/03/2026
إليك كود Python لاستخراج وعرض المباني في ArcGIS Pro على الـ Basemap:
طريقة الاستخدام:
افتح ArcGIS Pro وافتح Python Window أو استخدم Notebook
غيّر المسارات الثلاثة في أعلى الكود:
aprx_path ← مسار ملف مشروعك .aprx
buildings_path ← مسار طبقة المباني (GDB أو Shapefile)
map_name ← اسم الخريطة داخل المشروع (الافتراضي: "Map")
شغّل الكود
import arcpy
import os
# ==========================================
# إعدادات المشروع
# ==========================================
# مسار مشروع ArcGIS Pro (.aprx)
aprx_path = r"C:\Projects\MyProject\MyProject.aprx" # غيّر المسار
# مسار طبقة المباني (Feature Class أو Shapefile)
buildings_path = r"C:\Projects\MyProject\MyProject.gdb\Buildings" # غيّر المسار
# اسم الخريطة داخل المشروع
map_name = "Map"
# ==========================================
# فتح المشروع وإضافة طبقة المباني
# ==========================================
def add_buildings_to_basemap(aprx_path, buildings_path, map_name="Map"):
try:
# فتح مشروع ArcGIS Pro
aprx = arcpy.mp.ArcGISProject(aprx_path)
print(f"✅ تم فتح المشروع: {aprx_path}")
# الوصول إلى الخريطة
maps = aprx.listMaps(map_name)
if not maps:
print(f"❌ لم يتم العثور على خريطة باسم '{map_name}'")
print(f"الخرائط المتاحة: {[m.name for m in aprx.listMaps()]}")
return
map_obj = maps[0]
print(f"✅ تم الوصول إلى الخريطة: {map_obj.name}")
# التحقق من وجود طبقة المباني
if not arcpy.Exists(buildings_path):
print(f"❌ الطبقة غير موجودة: {buildings_path}")
return
# التحقق إذا كانت الطبقة مضافة مسبقاً
existing_layers = [lyr.name for lyr in map_obj.listLayers()]
layer_name = os.path.basename(buildings_path)
if layer_name in existing_layers:
print(f"⚠️ الطبقة '{layer_name}' موجودة مسبقاً في الخريطة")
else:
# إضافة طبقة المباني إلى الخريطة
map_obj.addDataFromPath(buildings_path)
print(f"✅ تم إضافة طبقة المباني: {layer_name}")
# ==========================================
# تطبيق تنسيق على طبقة المباني
# ==========================================
buildings_layer = map_obj.listLayers(layer_name)[0]
# الوصول إلى CIM (تنسيق رسومي متقدم)
cim = buildings_layer.getDefinition('V3')
# تغيير لون التعبئة والحدود
renderer = cim.renderer
if hasattr(renderer, 'symbol'):
polygon_symbol = renderer.symbol.symbol
for layer_sym in polygon_symbol.symbolLayers:
if hasattr(layer_sym, 'color'):
# لون التعبئة: برتقالي شفاف
layer_sym.color = {
"type": "CIMRGBColor",
"values": [255, 165, 0, 120] # RGBA
}
buildings_layer.setDefinition(cim)
print("✅ تم تطبيق التنسيق على الطبقة")
# ==========================================
# حفظ المشروع
# ==========================================
aprx.save()
print("✅ تم حفظ المشروع بنجاح")
# ==========================================
# طباعة معلومات الطبقة
# ==========================================
print("\n📊 معلومات طبقة المباني:")
desc = arcpy.Describe(buildings_path)
print(f" - نوع البيانات: {desc.dataType}")
print(f" - نظام الإحداثيات: {desc.spatialReference.name}")
count = int(arcpy.management.GetCount(buildings_path)[0])
print(f" - عدد المباني: {count:,}")
except Exception as e:
print(f"❌ حدث خطأ: {e}")
import traceback
traceback.print_exc()
# ==========================================
# تشغيل الكود
# ==========================================
if __name__ == "__main__":
add_buildings_to_basemap(aprx_path, buildings_path, map_name)