تعلم البرمجة في برنامج ArcGIS – الدرس الأول

في هذا الدرس ستتعلم

  • استخدام بايثون من داخل برنامج ArcGIS
  • اختيار Layer موجودة ضمن ملف mxd
  • إنشاء Layer جديدة حسب معيار معين.
  • أوامر الـخاصة بقائمة الـ geoprocessing مثل Merge، Dissolve، clip، buffer.
  • اجراء عملية اختيار بناء على البيانات الوصفية Selection by attributes.

في حال وددت تعلم بعض أساسيات البايثون قم بمتابعة هذه السلسلة التعليمية من موقعنا

Arcpy:

arcpy يعمل على منصة python 2.7، عند تنصيب برنامج ArcGIS فان ملف التنصيب يقوم بالإضافة لتنصيب مكتبة arcpy فأنه يقوم بتنصيب واجهة تفاعلية (IDLE) في ملف python27 الموجود مسبقا في الكومبيوتر.

المقالة لأهداف تعليمية فقط وغير مرتبطة بشركة Esri أو بالبرامج المذكورة

لاستخدام arcpy من داخل تطبيق ArcMap، قم باختيار python من قائمة Geoprocessing، من النافذة التي ستظهر بإمكاننا ادخال أوامر arcpy:

للحصول على البيانات التي سنستخدمها في دروس برمجة ArcGIS باستخدام Python من الموقع ، البيانات المستخدمة في هذه السلسلة

لا تنسى متابعتنا على صفحة الفيسبوك

لقراءة الطبقة Layer من ملف ذو لاحقة mxd وهي اللاحقة الخاصة ببرنامج ArcMapعلينا القيام بثلاث خطوات أساسية:

  1. قراءة ملف arcmap ذو اللاحقة mxd عن طريق الامر
mxd_file= arcpy.mapping.MapDocument("current")

كلمة current تعني قم بقراءة الملف الحالي، كما انه بالإمكان قراءة أي ملف mxd بكتابة المسار عوضا عن كلمة current بين اشارتي اقتباس.

قراءة الـ Data Frame بعد قراءة arcmap:

List_of_DataFrames=arcpy.mapping.ListDataFrames(mxd_file)
  1. لقراءة الـ Layers
lyrs=arcpy.mapping.ListLayers(mxd,"", List_of_DataFrames [0])

للتأكد من اننا قمنا بتنفيذ الأوامر بشكل صحيح بإمكاننا إظهار الأسماء الطبقات عن طريق حلقة for:

for i in lyrs:
  print i.name

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

ne_10m_populated_places

ne_10m_admin_1_states_provinces

lyr_city=lyrs[0]
lyr_prov=lyrs[1]

للقيام بعملية إنشاء طبقة جديدة حسب الاختيار يمكننا استخدام الأمر

arcpy.MakeFeatureLayer_management

سنقوم الآن باختيار دولتين (مثلا اسبانيا والبرتغال) وتخزينها بطبقة منفردة وسيتم استخدامها في بقية اومر الـ geoprocessing للاختيار يمكننا استخدام الأمر:

arcpy.MakeFeatureLayer_management(“اسم طبقة الدخل”, “اسم طبقة الخرج””المعيار”,)

اسم العمود الذي يحوي رمز البلد SOV_A3 ورموز البلدين هو ESP, PRT

arcpy.MakeFeatureLayer_management(lyr_prov,"spain",""" "SOV_A3" = 'ESP' """)
arcpy.MakeFeatureLayer_management(lyr_prov,"portugal",""" "SOV_A3" = 'PRT' """)

قبل البدء في الأوامر يجب نحدد workspace وهو المكان الذي ستحفظ الـ shapefile:

arcpy.env.workspace='d:/results'

سنقوم بإجراء أمر dissolve الموجود في القائمة geoprocessing على طبقة المحافظات للحصول على حدود الدول يمكن القيام به من خلال الامر

Dissolve_management (الطبقة الدخل, اسم الطبقة المخرجة, العمود الذي سيتم الاعتماد عليه عند دمج العناصر)

arcpy.Dissolve_management(lyr_prov,'lyr_country','sov_a3')

سنتابع الآن في أوامر الـ geoprocessing، أمرunion، يقوم الأمر بدمج عناصر من عدة طبقات في طبقة واحدة لتنفيذه يمكن استخدام الأمر

arcpy. Union_analysis (“أسماء الطبقات التي يراد دمجها بينها فاصلة منقوطة “, “اسم طبقة الخرج””المعيار إن وجد”,)

arcpy.Union_analysis("portugal;spain","spain_portugal")

أمر clip، يقوم الأمر بدمج باقتطاع جزء من طبقة واحدة بناءا على طبقة أخرى لتنفيذه يمكن استخدام الأمر

arcpy. Clip_analysis (“اسم الطبقة التي يراد الاقتطاع منها”, “اسم طبقة التي تشكل حدود القطع”, “اسم طبقة الخرج”)

باستخدام هذا الامر سنقوم بتشكيل طبقة تحوي مقاطعات دولة اسبانيا:

 

arcpy.Clip_analysis(lyr_prov,"spain","spain_provinces")

أمر buffer، يقوم الأمر بإنشاء حرم او حاجز حول عناصر طبقة يتم اختيارها يمكن استخدام الأمر

arcpy.Buffer_analysis(“اسم الطبقة المدخلة”,”اسم الطبقة المخرجة”, “المسافة مع واحدتها يمكن استخدام وحدات meter kilometer, degree, second”, “FULL/OUTSIDE_ONLY لتحديد شكل المضلع هل من الحدود للخارج فقط ام المضلع + الحدود الخارجية”,”ROUND/FLAT لتحديد نهايات القطع المستقيمة مدروة ام مستقيمة”(

باستخدام هذا الامر سنقوم بتشكيل buffer على مسافة 10 كم:

 

arcpy.Buffer_analysis("portugal","portugal_buffer","10 Kilometer")

للقيام بعملية اختيار باستخدام arcpy الأمر

SelectLayerByAttribute_management (الطبقة المدخلة, نوع الاختيار, معيار الاختيار)

في حال أردنا اختيار المدن التي عدد سكانها أكبر من 5 مليون نسمة، مع العلم انا عدد السكان موجود في العمود المسمى POP_MAX يمكننا استخدام الأمر التالي:

arcpy.SelectLayerByAttribute_management(lyr_city,"NEW_SELECTION",""" "POP_MAX" > 5000000 """)

ضمن المدخل الثاني يمكننا استخدام:

  • “NEW_SELECTION” اختيار جديد
  • “ADD_TO_SELECTION”إضافة العناصر المختارة إلى العناصر المختار مسبقا
  • “REMOVE_FROM_SELECTION”لحذف العناصر المختارة إلى العناصر المختارة مسبقا

ملاحظات عند كتابة معيار الاختيار (Where clause):

  • ضع كل المعيار ضمن نص ثلاث رموز اقتباس، كـ “”” المعيار “””، هذا المعيار متعلق بلغة برمجة python.
  • ضع اسم العمود ضمن رموز اقباس “اسم العمود”، وفي حال العمود يتم مقارنته بقيمة نصية يجب وضع القيمة النصية ضمن فاصلة علوية كـ التالي: ‘ القيمة’، هذا الشرط يتعلق بلغة SQL الخاصة بقواعد البيانات.
  • في النهاية كل معيار يجب أن يكتب على الشكل التالي: “”” “اسم العمود” = ‘القيمة’ “””

 

الكاتب : المهندس محمد حسن