توسيع برنامج ArcGIS برمجيا بواسطة Arcpy

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

  • إضافة خصائص Python API في برنامج ArcGIS .
  • كيفية إضافة toolbar في ArcGIS وإضافة أزرار يمكن برمجتها في الـ toolbar.
  • كيفية تصدير البيانات إلى اكسل عن طريق تصميم زر مخصص مبرمج بواسطة ArcPy.

تتيح إضافة Python API تعديل واجهة المستخدم في برنامج ArcMap، هذه الإضافة تسمح للمستخدم بإضافة تطبيقات يمكن برمجتها باستخدام لغة البرمجة Python على شكل أزرار يمكن وضعها في قوائم وشرائط أدوات، داخل تحميل Python API Add-in من موقع ArcGIS مجانا من الرابط التالي، حجم التحميل تقريبا 7 ميغابايت:

http://www.arcgis.com/home/item.html?id=5f3aefe77f6b4f61ad3e4c62f30bff3b

بعد الانتهاء من تحميل الاضافة ، يجب فك ضغط الملف لنحصل على ملف اسمه addin_aaistant. بعد ذلك  يمكننا تشغيل برنامج addin_assistant.exe، من الملف addin_assistant\bin. بعد تشغيل البرنامج Addin_assistant.exe، بعد التشغيل سيطلب منك البرنامج بإنشاء ملف جديد على سطح المكتب ونسميه python_api. لضمان عمل البرنامج بشكل صحيح قم بتعديل version لرقم تختاره أنت:

من التبويب add_in contentsنقوم بالنقر بالزر الأيمن واختيار new toolbar، يمكننا انشاء زر جديد بالنقر بالزر الأيمن على القائمة الجديدة واختيار new button، سنقوم بإنشاء زرين أحدهما لعمل zoom على العناصر المختارة، وزر آخر لتصدير البيانات إلى excel بعد الانتهاء من إضافة الأزرار نقوم بالضغط على زر save. للحصول على الأيقونات الخاصة برنامج ArcGIS لوضعها كرموز للأزرار من المسار التالي، في حال لم سيتم وضع الـ caption عوضا عن الأيقونة :

C:\Program Files (x86)\ArcGIS\Desktop10.5\bin\Icons

بعد الانتهاء يمكننا الانتقال إلى المجلد Install من داخل python_api، سنجد في داخل المجلد ملف python_API_addin.py، بالنقر الزر الأيمن نختار تعديل باستخدام Idle، في الملف يوجد الكود التالي:

# استيراد مكتبة arcpy المختصة بتوابع python في ArcGIS
# استيراد مكتبة pythonaddins المختصة بتصميم الإضافات في ArcGIS
# تعريف الزر export على شكل сlass
# التعليمة __init__ في بايثون تحدد الخصائص الأساسية في الـ сlass
# التعلمية self.enabled تحدد فيما اذا كان الزر يمكن تفعيله
# التعلمية self.checked تحدد فيما إذا كان الزر المبرمج سيتم التحقق لأخطاء البرمجة قبل تفعيل الزر
# التعلمية onClick تحدد الأوامر التي سيتم تنفيذها عندما يتم النقر على الزر

 

import arcpyimport pythonaddins
class export(object):
"""Implementation for python_API_addin.button_1 (Button)"""
 def __init__(self):
self.enabled = True
self.checked = False

 def onClick(self):
  pass

class zoom(object):
 """Implementation for python_API_addin.button (Button)"""

 def __init__(self):
  self.enabled = True
  self.checked = False

 def onClick(self):
  pass 

لبرمجة الأزرار يجب وضع الكود في بعد onClick(self) وحذف كلمة pass.

برنامج الزر الأول سيكون عمل zoom للعناصر المختار، لعمل zoom للمنطقة نحتاج الى data_frame عن طريق ال class الـ zoomToSelectedFeatures ، الأمرين MapDocument و ListDataFrames تم شرحهما في الدرس الأول

mxd_file=arcpy.mapping.MapDocument("current")
df=arcpy.mapping.ListDataFrames(mxd_file)[0]
df.zoomToSelectedFeatures()

 

الزر الثاني:

الزر الثاني سيقوم بإنشاء ملف اكسل، لإنشاء هذا الملف نحن بحاجة إلى إنشاء shapefile مؤقت يتم حذف هذا الملف بشكل تلقائي، scratchWorkspace تسمح بإنشاء geodatabase مؤقتة تحذف تلقائيا عند اغلاق البرنامج، من خلال الأوامر التالية:

arcpy.env.overwriteOutput = True
arcpy.env.scratchWorkspace = 'c:/' 

الخطوة التالية هي تعريف العناصر المختارة من الواجهة الرسومية، لذلك يجب علينا تحديد الطبقة المختارة عن طريق الأمر pythonaddins.GetSelectedTOCLayerOrDataFrame، اما لتحديد العناصر المختارة يجب استخدام الأمر SearchCursor.

 

active_layer = pythonaddins.GetSelectedTOCLayerOrDataFrame()
selected_items =arcpy.SearchCursor(active_layer) 

الخطوة الأخيرة هي تحويل العناصر المختارة إلى طبقة مؤقتة على شكل shapefile عن طريق الأمر FeatureClassToFeatureClass_conversion، لتحويل العناصر الموجودة في الطبقة المؤقتة ننفذ الأمر

TableToExcel_conversion(“الطبقة المختارة للتحويل إلى جدول” , “اسم ومسار جدول الاكسل”)

، وفي النهاية نقوم بحذف الأمر عن طريق Delete_management

arcpy.FeatureClassToFeatureClass_conversion(active_layer,arcpy.env.scratchGDB,"temp")
arcpy.TableToExcel_conversion("temp","С:/1.xls")
arcpy.Delete_management("temp") 

الملف بالكامل يجب أن يكون على الشكل التالي، الكود الذي تم إضافته تمت كتابته باللون الأحمر:

import arcpy
import pythonaddins

class export(object):
    """Implementation for python_API_addin.button_1 (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        arcpy.env.overwriteOutput = True
        arcpy.env.scratchWorkspace = 'c:/'
        active_layer = pythonaddins.GetSelectedTOCLayerOrDataFrame()
        selected_items =arcpy.SearchCursor(active_layer)
        arcpy.FeatureClassToFeatureClass_conversion(active_layer,arcpy.env.scratchGDB,"temp")
        arcpy.TableToExcel_conversion("temp","g:/1.xls")
        arcpy.Delete_management("temp")

class zoom(object):
    """Implementation for python_API_addin.button (Button)"""
    def __init__(self):
        self.enabled = True
        self.checked = False
    def onClick(self):
        mxd_file=arcpy.mapping.MapDocument("current")
        df=arcpy.mapping.ListDataFrames(mxd_file)[0]
        df.zoomToSelectedFeatures()

لإنهاء عملية البرمجة قم بتشغيل makeaddin.py من المجلد python_API، ومن ثم قم بتشغيل من نفس المجلد python_API.esriaddin، قم الآن بتشغيل ArcMap، في البرنامج يجب ان يكون هناك toolbar حسب الاسم الذي قمنا باختياره في الخطوة الأولى، إضافة الـ toolbar من قائمة customize، خيار toolbar.

ملاحظات:

  • عند تعديل ملف البايثون الذي يحوي برنامج الأزرار قم بتشغيل makeaddin.py و python_API.esriaddin على التوالي، ليتم تحديث البرنامج في الأزرار.
  • برنامج التصدير ببرنامج الاكسل يجب ان يتم اختيار طبقة من الطبقات الموجودة يسار البرنامج.

  • في حال كان لديك هناك خطأ في البرمجة الرمز سيكتب missing وغير قابل للنقر.
  • لحذف الإضافة من البرنامج يتم من add-in manager من قائمة customize.

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

One comment

التعليقات مغلقة.