آموزش گام به گام  
 ایجاد ابزار پایتون

در این آموزش چگونگی ایجاد اسکریپت پایتون که به عنوان یک ابزار در ArcToolbox اجرا می‌شود، نشان داده شده. این ابزار به طور خودکار فرایندهای دسته‌ای اسناد ArcMap، اطلاعات مربوط به لایه‌های آن اسناد را جمع‌آوری می‌کند، و آن اطلاعات را به عنوان (‏CSV) ‏که می‌تواند به عنوان یک جدول در  اکسل یا برنامه دیگری که می‌تواند فایل‌های CSV را باز کند، مشاهده شود. ​

با نوشتن اسکریپت‌های پایتون که از ماژول ArcPy استفاده می‌کنند، با استفاده از ArcGIS for Desktop (‏به خصوص ArcToolbox)‏ آشنا باشید، و بدانید چگونه ابزارها را از یک فایل اسکریپت اضافه کنید. این تمرین از چندین بسته پایتون استفاده می‌کند: ArcPy (‏بسته سایت ArcGIS)‏، OS (‏رابط‌های سیستم‌عامل متفرقه)، fnmatch (‏تطبیق الگوی نام فایل UNIX) ‏و CSV (‏خواندن و نوشتن فایل CSV).

داده‌ها را از این قسمت دانلود کنید. (حجم: 180 کیلوبایت)

اگر برنامه ArcMap را ندارید، می‌توانید آخرین نسخه را از این صفحه دریافت کنید.

چالش

هدف از این آموزش ایجاد ابزاری است که به طور خودکار لایه‌های نقشه را در ArcMap در پوشه ذخیره کرده و یک پرونده CSV با فهرست کردن properties لایه‌ها ایجاد ‌کند. ​

هدف

​​​​​​برای انجام این چالش، یک اسکریپت پایتون را توسعه داده که به عنوان جعبه ‌ابزار پایتون در ArcMap یا ArcCatalog اجرا می‌شود. این اسکریپت ورودی کاربر برای directory یا ‏MXD برای تجزیه و تولید خروجی به عنوان یک فایل CSV خواهد داشت. پرونده CSV می‌تواند در اکسل یا برنامه دیگری که می‌تواند فایل‌های CSV را بخواند، باز شود و به صورت یک جدول دیده شود. با ایجاد این ابزار در جعبه ‌ابزار پایتون، هر کاربر ArcGIS می‌تواند از قابلیت ArcPy بدون دانستن پایتون استفاده کند. ​

راه‌ حل

این اسکریپ پایتون قادر می‌تواند تمام اسناد را در یک directory حاوی آن پردازش کند. ایجاد یک اسکریپت جدید پایتون با استفاده از یک ویرایشگر پایتون یا با ایجاد فایل متنی جدید (‏txt.)‏ و تغییر پسوند فایل به py امکان پذیر است.

توجه: اگر پسوندهای فایل در ویندوز نمایش داده نمی‌شوند، تنظیمات را در کنترل پنل ویندوز را تغییر دهید. ​

روش‌های مختلفی برای توسعه این اسکریپت وجود دارد. لیست ۱ مثالی را ارایه می‌دهد. ماژول‌ها را وارد می‌کند، اسناد ArcMap که پردازش می‌شوند، را تعریف می‌کند، مسیرهای آن‌ها را تعریف می‌کند، اسناد را تجزیه می‌کند، و اطلاعات را به یک فایل CSV تعریف‌ شده توسط کاربر می‌نویسد. ​

(‏بخش اول ماژول ها را وارد می‌کند)‏.

#Import modules…
import arcpy, os, fnmatch, csv

(‏بخش بعدی متغیرهای ورودی کاربر را تعریف می‌کند)‏.

#User input variables…
mxddirectory = arcpy.GetParameterAsText(0)
mxd_single = arcpy.GetParameterAsText(1)
outputcsvlocation = arcpy.GetParameterAsText(2)

(‏این بخش اسناد ArcMap را برای تجزیه تعریف می‌کند)‏.

#Create an empty list of ArcMap documents to process…
mxd_list=[]
#If a user defined a single mxd, add its path to the list…
if len(mxd_single) > 0:
mxd_list.append(mxd_single)
#Otherwise walk through the input directory, adding paths for
each .mxd file found to the list…
else:
for dirpath in os.walk(mxddirectory): #os.walk returns \
(dirpath, dirnames, filenames)
for filename in dirpath[2]:
if fnmatch.fnmatch(filename, “*.mxd”):
mxd_list.append(os.path.join(dirpath[0], filename))

(‏این بخش اسناد را تجزیه کرده و اطلاعات را به یک فایل CSV تعریف‌شده توسط کاربر می‌نویسد)‏.

#Iterate the list of mxd paths and gather property values then
write to csv file…
if len(mxd_list) > 0:
#Create the csv file…
outputcsv = open(outputcsvlocation,”wb”)
writer = csv.writer(outputcsv, dialect = ‘excel’)
#Write a header row to the csv file…
writer.writerow([“mxdpath”, “layername”, “layerdescription”, “layersource”])
#Iterate through the list of ArcMap Documents…
for mxdpath in mxd_list:
mxdname = os.path.split(mxdpath)[1]try:
mxd = arcpy.mapping.MapDocument(mxdpath)
#Iterate through the ArcMap Document layers…
for layer in arcpy.mapping.ListLayers(mxd):
layerattributes = [mxdpath, layer.longName, \
layer.description, layer.dataSource]#Write the attributes to the csv file…
writer.writerow(layerattributes)
except:
arcpy.AddMessage(“EXCEPTION: {0}”.format(mxdpath))
del mxd
#close the csv file to save it…
outputcsv.close()
#If no ArcMap Documents are in the list, then notify via an
error message…
else:
arcpy.AddError(“No ArcMap Documents found. Please check your input \
variables.”)

اضافه کردن اسکریپت به جعبه ابزار

ArcMap باز کنید، سپس Catalog را باز کنید. در Catalog، به پوشه‌ای که می‌خواهید جعبه ‌ابزار جدید قرار داشته باشد، بروید و روی آن راست کلیک کنید. New > Toolbox را انتخاب کنید. با انتخاب Rename نام را تغییر دهید.

بر روی جعبه ‌ابزار جدید راست کلیک کرده و Add > Script را انتخاب کنید. ​در پنجره Add Script، در قسمت name عبارت ArcMapDocumentPropertiesToCSV و در قسمت label عبارت ArcMapDocumentPropertiesToCSV و در قسمت description عبارت Parses through one or many ArcMap documents and collects property values into a CSV file را وارد کنید.​ تیک ​ Store relative path names را فعال کنید. بر روی Next کلیک کنید.

در قسمت script file از دکمه Browse استفاده کنید. پنجره فرمان را ببندید. تیک گزینه Run Python script in process را فعال کنید. بر روی Next کلیک کنید.

در قسمت بعدی، متغیرهای ورودی را اضافه کنید.

کادر بالا را با مقادیر جدول زیر پر کنید.

کادر parameters Properties را با مقادیر جدول زیر تکمیل کنید.

در نهایت روی Finish‌ کلیک کنید.

اجرای ابزار

برای فراخوانی ابزار اسکریپت دوبار کلیک کنید. در این پنجره، برای انتخاب mxd_directory روی اولین دکمه Browse و برای انتخاب single ArcMap document دکمه دوم Browse کلیک کنید.

اگر مقادیر برای هر دو وارد شوند، تک سند ArcMap تجزیه می‌شود. اگر هیچ ورودی داده نشود، خطا رخ می‌دهد. پوشه خروجی انتخاب کنید. 

این اسکریپت را می توان گسترش داد. می‌توان از آن برای تنظیم مقادیر خواص خاص استفاده کرد. برای مثال، تاریخ‌ها، نشانی‌های اینترنتی، و نام‌های سازمان می‌توانند به روز شوند.

مشاهده آموزش‌های دیگر