تحلیل های مکانی با استفاده از پایتون-فصل 5
5.1معرفی
این فصل بسته ArcPy را توصیف می کند که امکان ادغام نزدیک ArcGIS Pro و Python را فراهم می کند. ArcPy شامل بسیاری از ماژولها، کلاسها و توابع است که استفاده از تمامی ابزارهای geoprocessing در ArcGIS Pro را در یک اسکریپت پایتون ممکن میسازد. این فصل یک نمای کلی از عملکرد ArcPy با تمرکز بر استفاده از ابزارهای پردازش جغرافیایی ارائه می دهد. همچنین عملکردهای غیرابزاری اضافی مربوط به اجرای وظایف پردازش جغرافیایی، از جمله ایجاد محیطها، تنظیم مسیرهای دادهها و مدیریت مجوزها را پوشش میدهد. فصل های بعدی قابلیت های اضافی ارائه شده توسط ArcPy را پوشش می دهند.
5.2با استفاده از بسته ArcPy
قابلیت پردازش جغرافیایی ArcGIS Pro از طریق پایتون با استفاده از بسته ArcPy قابل دسترسی است. بسته در پایتون مجموعه ای از ماژول ها و عناصر دیگر است که قابلیت هایی را به پایتون اضافه می کند. یک بسته مانند یک ماژول کار می کند، اما یک بسته شامل چندین ماژول و همچنین توابع و کلاس ها است.
ArcPy در نسخه 10 ArcGIS Desktop با هدف آسانتر و قدرتمندتر کردن اسکریپتنویسی پایتون معرفی شد. قبل از ArcGIS Desktop 10.x، قابلیت پردازش جغرافیایی ArcGIS در پایتون با استفاده ازarcgisscriptingمدول. اسکریپت های نوشته شده برای نسخه های قبلی ArcGIS Desktop معمولاً از این ماژول استفاده می کنند. تمرکز در این کتاب روی ArcPy است و ماژول قدیمیتر در این کتاب پوشش داده نشده است. با اينكهarcgisscriptingهنوز در ArcGIS Pro پشتیبانی می شود، استفاده از آن تشویق نمی شود.
ArcPy در ماژول ها، توابع و کلاس ها سازماندهی شده است که در بخش های زیر توضیح داده شده است.
5.3وارد کردن ArcPy
کار با ArcPy با وارد کردن بسته شروع می شود. بنابراین یک اسکریپت پردازش جغرافیایی معمولی با خط کد زیر شروع می شود:
واردات کمان
هنگامی که ArcPy را وارد کردید، می توانید تمام ابزارهای geoprocessing موجود در جعبه ابزار نصب شده با ArcGIS Pro را اجرا کنید.
ArcPy شامل چندین ماژول، از جمله یک ماژول برای کار با داده (arcpy.daیک ماژول برنامه نویسی نقشه (arcpy.mp، ماژولی برای تجزیه و تحلیل و تفسیر تصویر (arcpy.ia، و یک ماژول برای جبر نقشه و تجزیه و تحلیل شطرنجی (arcpy.sa). پس از وارد کردن ArcPy، می توانید از ماژول ها، توابع و کلاس های آن استفاده کنید.
وارد کردن ArcPy در اسکریپت شما نه تنها عملکرد ArcPy را آشکار می کند، بلکه دو بررسی مهم را نیز انجام می دهد: در دسترس بودن ArcPy و در دسترس بودن مجوز. ابتدا مشخص می کند که آیا ArcPy در واقع در دسترس است یا خیر، که مستلزم نصب ArcPy است و ویرایشگر Python که برای اجرای اسکریپت استفاده می شود برای استفاده از ArcPy پیکربندی شده است. ArcPy به عنوان بخشی از نصب ArcGIS Pro نصب شده است و بسته ArcPy بخشی از محیط پیش فرض arcgispro-py3 است. بنابراین، اگر ArcGIS Pro را روی رایانه خود نصب کرده اید، ArcPy نیز دارید. هنگامی که از IDLE برای نوشتن کد خود استفاده می کنید، و اگر از نسخه IDLE نصب شده به عنوان بخشی از نصب ArcGIS Pro استفاده می کنید، ArcPy در دسترس است. نصب پیشفرض سایر IDEها – برای مثال PyCharm – به چند مرحله اضافی برای در دسترس بودن ArcPy نیاز دارد. اگر ArcPy در دسترس نیست،واردات کمانپیغام خطای زیر را ایجاد می کند:
ImportError: هیچ ماژولی با نام arcpy وجود ندارد
وقتی ArcPy در دسترس است، بررسی دوم این است که آیا مجوز در دسترس است یا خیر. مهم است که بدانیم ArcPy بخشی از ArcGIS Pro است و بنابراین نیاز به مجوز دارد. پایتون خود نرم افزار منبع باز است، مانند بسیاری از بسته های دیگر برای پایتون. این بدان معناست که نرم افزار را می توان آزادانه توزیع کرد. از طرف دیگر، ArcPy منبع باز نیست و در نتیجه باید بررسی شود که مجوز در دسترس است. اگر ArcPy نصب شده است، اما هیچ مجوزی در دسترس نیست، خط کدواردات کمانپیغام خطای زیر را ایجاد می کند:
Runtime Error: NotInitialized
هنگام نوشتن کد در پنجره Python در ArcGIS Pro، نیازی به وارد کردن ArcPy یا بررسی مجوز نیست. از آنجایی که شما کد را از داخل برنامه ArcGIS Pro اجرا می کنید، در دسترس بودن و مجوز ArcPy ضمنی است. هر اسکریپت پایتونی که خارج از ArcGIS Pro اجرا میشود – برای مثال با استفاده از IDLE یا PyCharm – باید ازواردات کمان.
5.4راه اندازی یک فضای کاری
به طور معمول یکی از اولین وظایف در یک اسکریپت تنظیم فضای کاری فعلی است. یک فضای کاری یک مکان پیشفرض برای فایلهایی که با آنها کار میکنید، مانند ورودی و خروجی ابزارهای پردازش جغرافیایی، فراهم میکند. برای مثال، در اینجا نحوه تنظیم فضای کاری فعلی به C:\Data آمده است:
واردات کمان
arcpy.env.workspace = “C:/Data”
توجه داشته باشید:به یاد داشته باشید که نباید از اسلش (\) برای مسیرها استفاده کنید زیرا پایتون آن را به عنوان یک کاراکتر فرار می بیند. نمادهای صحیح دیگر هستندr”C:\Data”و“C:\\داده”.
توجه داشته باشید که مسیر یک متغیر رشته ای است.
یک اسکریپت پایتون مستقل همچنین دارای یک فهرست کار فعلی است که به طور پیش فرض محل اسکریپت است. با استفاده از آن می توانید دایرکتوری کاری فعلی را بدست آوریدos.getcwd()و با استفاده از آن می توانید آن را تغییر دهیدos.chdir(). با این حال، این گزینهها برای کار با مجموعه دادههای مکانی کافی نیستند زیرا همه فضاهای کاری معتبر در ArcGIS Pro توسط سیستم عامل ویندوز شناسایی نمیشوند. در نتیجه، فضای کاری در یک اسکریپت پردازش جغرافیایی باید با استفاده از آن تنظیم شودarcpy.env.workspace.
یک فضای کاری یکی از چندین محیط است که به عنوان ویژگی های ArcPy در معرض دید قرار می گیرندenvکلاس بخش 5.9 کلاس ها را با جزئیات بیشتری توضیح می دهد. این ویژگی ها مقادیر فعلی را بازیابی یا تنظیم می کنند. در کد قبل،envیک کلاس است وفضای کاراز ویژگی های این کلاس است. هنگام استفاده از کلاس ها در ArcPy، نحو است
arcpy.<class>.<property>
نمونه های بیشتری از این نحو را در ادامه این فصل خواهید دید.
یک روش جایگزین این است که فقط وارد کنیدenvکلاس می توانید استفاده کنیداز وارداتبیانیه برای وارد کردن تنها بخشی از یک ماژول یا بسته. کد زیر فقط کد را وارد می کندenvکلاس هنگامی که کلاس وارد شد، به جای دسترسی به خصوصیات محیط با استفاده ازarcpy .env، می توانید آن را ساده کنیدenv.
از arcpy import env
env.workspace = “C:/Data”
اگرچه این روش رایج است، اما در تایپ کردن صرفه جویی زیادی نمی کند. در نتیجه استفاده از آن توصیه می شودarcpy.env.workspaceبجایاز arcpy import envبه دنبالenv.workspace.
میتوانید با دادن یک نام سفارشی به یک ماژول یا بخشی از یک ماژول با استفاده از عبارت، واردات را کنترل کنیداز واردات به عنوانبیانیه به شرح زیر
از arcpy import env به عنوان myenv
myenv.workspace = “C:/Data”
اگرچه استفاده از نام های سفارشی طول کد شما را کوتاه نمی کند، اما می تواند خواندن آن را آسان تر کند.
دراز واردات به عنوان *بیانیه یک گام فراتر می رود. در این حالت، محتویات ماژول مستقیماً به فضای نام وارد می شود، به این معنی که دیگر نیازی به اضافه کردن پیشوند به محتوا یا استفاده از نام ماژول ندارید.
از arcpy import env به عنوان *
فضای کاری = “C:/Data”
فضای نام در پایتون سیستمی است که مطمئن می شود همه نام ها منحصر به فرد هستند و می توانند بدون هیچ گونه تضاد مورد استفاده قرار گیرند. به زبان ساده، فضای نام مجموعه ای از نام های مورد استفاده در یک اسکریپت است. وقتی استفاده می کنیداز <module> import *یا از<module> وارد کردن <class> به عنوان *، همه نام ها را مستقیماً به فضای نام فعلی وارد می کنید.
توجه داشته باشید:استفاده از این عبارات واردات جایگزین می تواند طول کد شما را کاهش دهد، اما باید مراقب باشید زیرا سایر اشیاء، متغیرها و ماژول هایی که نام مشابهی دارند بازنویسی می شوند. به طور کلی، توصیه می شود که به آن پایبند باشیدarcpy.env.workspace. یک استثنا استفاده از عملیات جبر نقشه با استفاده ازarcpy.saمدول؛ فصل 10 این استثنا را توضیح می دهد.
5.5استفاده از ابزارهای ژئوپردازش
ArcPy به شما امکان دسترسی به تمام ابزارهای geoprocessing در ArcGIS Pro را می دهد. در پایتون به ابزارهای ژئوپردازش با نام اشاره می شود. این نام دقیقاً با برچسب ابزار مطابقت ندارد، به این ترتیب ابزار در ArcGIS Pro ظاهر می شود. نام ابزار به طور کلی با برچسب ابزار یکسان است اما فاقد فاصله است. به عنوان مثال، نام ابزار Add Field در جعبه ابزار مدیریت داده استAddFieldدر ArcPy
علاوه بر استفاده از نام ابزار، ارجاع به ابزار به نام مستعار جعبه ابزار نیز نیاز دارد. این به این دلیل است که چندین ابزار در جعبه ابزارهای مختلف می توانند یک نام مشترک داشته باشند. برای مثال، چندین ابزار Clip وجود دارد: یکی در جعبه ابزار تجزیه و تحلیل (یعنی کلیپ) و دیگری در جعبه ابزار مدیریت داده (یعنی Clip Raster، اما نام در ArcPy است.کلیپ). نام مستعار جعبه ابزار با نام یا برچسب جعبه ابزار یکسان نیست – معمولاً یک نسخه کوتاه شده است. به عنوان مثال، نام مستعار جعبه ابزار مدیریت داده ها “مدیریت” است.
ابزار Clip در جعبه ابزار Analysis به عنوان ارجاع داده می شودClip_analysis(). نام مجموعه ابزار (یعنی Extract در این مورد) ارجاع داده نمی شود. از سوی دیگر، ابزار Clip Raster در جعبه ابزار مدیریت داده به عنوان ارجاع داده شده استClip_management().
دو راه برای دسترسی به یک ابزار در یک خط کد پایتون وجود دارد. ساده ترین راه برای استفاده از یک ابزار، فراخوانی تابع مربوطه آن است. تمام ابزارهای پردازش جغرافیایی به عنوان توابع در ArcPy در دسترس هستند. یک تابع در پایتون یک بیت تعریف شده از عملکرد است که یک کار خاص را انجام می دهد. بنابراین منطقی است که هر ابزار geoprocessing در ArcGIS Pro یک تابع در ArcPy باشد. نحو برای فراخوانی یک ابزار بر اساس عملکرد آن است
arcpy.<toolname_toolboxalias>(<parameters>)
به عنوان مثال، کد زیر ابزار Clip را اجرا می کند:
واردات کمان
arcpy.env.workspace = “C:/Data”
arcpy.Clip_analysis(“streams.shp”، “study.shp”، “result.shp”)
ابزارها با استفاده از ماژول هایی که با نام مستعار جعبه ابزار مطابقت دارند نیز در دسترس هستند. یک راه جایگزین برای دسترسی به ابزار این است که ابتدا جعبه ابزار را به عنوان یک ماژول و سپس ابزار را به عنوان تابعی از این ماژول و به دنبال آن پارامترهای ابزار را فراخوانی کنید. نحو است
arcpy.<toolboxalias>.<Toolname>(<parameters>)
در اینجا مثالی برای اجرای ابزار Clip به نظر می رسد:
واردات کمان
arcpy.env.workspace = “C:/Data”
arcpy.analysis.Clip(“streams.shp”، “study.shp”، “result.shp”)
هر دو روش صحیح است. رویکردی که استفاده میکنید به اولویت و عادتهای کدنویسی بستگی دارد.
توجه داشته باشید:سبک کدنویسی اتخاذ شده برای این کتاب بیشتر ازarcpy.Clip_analysisسبک ابزارهای فراخوانی، اما ممکن است سبک دیگر را در اسکریپت هایی از منابع دیگر ببینید.
فقط چند یادآوری سریع در مورد نحو پایتون:
- پایتون به حروف کوچک و بزرگ حساس است، بنابراینکلیپدرست است، اماکلیپنیست. وقتی استفاده می کنیدکلیپ_تحلیل، یک پیغام خطا دریافت خواهید کرد زیرا تابع پیدا نمی شود:AttributeError: ماژول ‘arcpy’ هیچ ویژگی ‘clip_analysis’ ندارد.
- استفاده از فاصله یا فضای خالی در یک خط کد تاثیری در اجرای آن ندارد. مثلا،Workspace=”C:/Data”مثل این هست کهفضای کاری = “C:/Data”. فضای خالی برای بهبود خوانایی توصیه می شود اما لازم نیست. با این حال، فاصله بین ماژول ها، توابع، کلاس ها، متدها و ویژگی ها را درج نکنید. مثلا،workspaceدرست است، اماenv فضای کار(با یک فاصله در بین) نیست. همچنین، فاصله بین توابع و آرگومان های آنها را درج نکنید، بنابراین<نام ابزار>(<پارامترها>)درست است، اما<نام ابزار> (<پارامترها>)نیست.
توجه داشته باشید:استفاده از فضاهای اضافی همیشه منجر به خطا نمی شود و پایتون نسبتاً قوی است. به عنوان مثال، با استفاده ازenv فضای کار(با یک فاصله در بین) خطایی ایجاد نمی کند و همچنین نمی کندکمان .تحلیل. کلیپ (). به طور کلی، با این حال، تمرین خوبی است که هیچ فضای اضافی اضافه نکنید.
- علامتهای نقل قول در پایتون همیشه مستقیم هستند و فرفری نیستند، بنابراین از ” ” استفاده کنید و نه””. برای کدهای تایپ شده در ویرایشگر پایتون، سبک صحیح گیومه ها به صورت خودکار وارد می شود. با این حال، هنگام کپی کردن کد از برنامه های کاربردی دیگر، مانند یک سند Microsoft Word یا یک فایل PDF، علامت نقل قول نادرست ممکن است رخ دهد.
یکی از جنبههای کلیدی ابزارهای پردازش جغرافیایی، به دست آوردن نحو درست برای پارامترها است. هر ابزار geoprocessing دارای پارامترهایی از جمله موارد مورد نیاز و اختیاری است که اطلاعات مورد نیاز ابزار را برای اجرا فراهم می کند. پارامترهای رایج عبارتند از مجموعه داده های ورودی، مجموعه داده های خروجی و کلمات کلیدی که اجرای ابزار را کنترل می کنند. خود پارامترها دارای ویژگی هایی مانند موارد زیر هستند:
- نام: یک نام منحصر به فرد برای هر پارامتر ابزار
- نوع: نوع داده مورد انتظار، مانند کلاس ویژگی، عدد صحیح، رشته یا شطرنجی
- جهت: اینکه آیا پارامتر مقادیر ورودی یا خروجی را تعریف می کند
- مورد نیاز: آیا باید مقداری برای یک پارامتر ارائه شود یا اختیاری است
مستندات هر ابزار در ArcGIS Pro به توصیف پارامترها و ویژگی های آن کمک می کند. پس از ارائه یک مجموعه معتبر از پارامترها، ابزار آماده اجرا است. اکثر پارامترها به عنوان یک رشته مشخص می شوند. رشته ها از متنی تشکیل شده اند که یک مقدار پارامتر را مشخص می کند، مانند مسیری به مجموعه داده یا یک کلمه کلیدی.
مستندات ابزار Clip که بخشی از آن در شکل نشان داده شده است، پارامترهای آن را توضیح می دهد.
ابزار Clip دارای چهار پارامتر است که آخرین آن (cluster_tolerance) اختیاری بودن نحو ابزار Clip است
Clip(in_features، clip_features، out_feature_class،
{cluster_tolerance})
نام ابزار Clip با پارامترهای ابزار در داخل پرانتز دنبال می شود. پارامترها با کاما از هم جدا می شوند. پارامترهای اختیاری با مهاربندهای { } احاطه شده اند. یک فاصله بین پارامترها استفاده می شود، اما فقط برای بهبود خوانایی است و لازم نیست.
سینتکس ابزارهای پردازش جغرافیایی معمولاً از همان الگوی کلی پیروی می کند، به شرح زیر:
- پارامترهای مورد نیاز اول و سپس پارامترهای اختیاری قرار می گیرند. این ترتیب طراحی کلی ابزارها در چارچوب ژئوپردازش در ArcGIS Pro را منعکس می کند.
- مجموعه دادههای ورودی معمولاً اولین پارامتر یا پارامترها هستند و در صورت وجود، مجموعه دادههای خروجی قرار میگیرند. بعد پارامترهای مورد نیاز اضافی و در نهایت پارامترهای اختیاری هستند. این ترتیب همیشه دقیقاً رعایت نمی شود، به خصوص برای ابزارهایی با پارامترهای زیاد.
- نام پارامترها برای مجموعه داده های ورودی با پیشوند “in_” (مانندin_data،in_features،روی میز،in_workspace، و نام پارامترها برای مجموعه داده های خروجی با پیشوند “out_” (مانند،out_data،out_features،بیرون میز).
فهرست کردن پارامترهای مورد نیاز ابتدا حذف پارامترهای اختیاری را در مواقعی که نیازی به آنها نیست آسان می کند. با این حال، گاهی اوقات، برخی از پارامترهای اختیاری باید تنظیم شوند. از آنجایی که پارامترها باید به ترتیبی که در سینتکس ابزار فهرست شده اند مشخص شوند، می تواند به این معنا باشد که برخی از پارامترهای اختیاری ممکن است نیاز به رد شدن داشته باشند.
به عنوان مثال، نحو ابزار Buffer را در نظر بگیرید:
بافر(in_features، out_feature_class،
buffer_distance_or_field، {line_side}،
{line_end_type}، {dissolve_option}، {dissolve_field})
نمونه کد ابزار Buffer به شرح زیر است:
واردات کمان
arcpy.env.workspace = “C:/Data/study.gdb”
arcpy.Buffer_analysis(“جاده ها”، “بافر”، “100 متر”)
با استفاده از این مثال، چگونه گزینه اختیاری را مشخص می کنیدdissolve_optionپارامتر و از سایر پارامترهای اختیاری که از پارامترهای مورد نیاز پیروی می کنند صرف نظر کنید؟ تعیین این پارامتر را می توان به روش های مختلف انجام داد:
- با تنظیم پارامترهای اختیاری با استفاده از یک رشته خالی (“”، علامت عدد (“#”) یا مقدارهیچ یک
- با تعیین نام پارامتری که باید تنظیم شود، با دور زدن بقیه پارامترها
ابزار Buffer دارای سه پارامتر مورد نیاز و پنج پارامتر اختیاری است. برای تعیین یک گزینه انحلال (به عنوان مثال، LIST) و فیلد مورد استفاده در این حل (به عنوان مثال، CODE)، دو پارامتر اختیاری باید نادیده گرفته شوند. این را از راه های گوناگون می توان انجام داد:
arcpy.Buffer_analysis(“جاده”، “بافر”، “100 متر”، “”، “،
“LIST”، “CODE”)
arcpy.Buffer_analysis(“جاده ها”، “بافر”، “100 متر”، “#”، “#”،
“LIST”، “CODE”)
arcpy.Buffer_analysis(“جاده ها”، “بافر”، “100 متر”، هیچ، هیچ،
“LIST”، “CODE”)
arcpy.Buffer_analysis(“جاده ها”، “بافر”، “100 متر”،
dissolve_option=”LIST”، dissolve_field=”CODE”)
در هر یک از این چهار مورد، پارامترهای اختیاریخط_سمتوline_end_typeبه مقادیر پیش فرض خود رها می شوند.
توجه داشته باشید:اگرچه هر یک از این سه گزینه صحیح است، اما نمونه های موجود در این کتاب معمولاً از گزینه رشته خالی استفاده می کنند (“”). همچنین توجه داشته باشید که وقتی یک پارامتر با نام مشخص می شود، طبق قرارداد از هیچ فاصله ای استفاده نمی شود—یعنی،dissolve_option=”LIST”و نهdissolve_option = “LIST”اگرچه این سبک مورد نیاز نیست.
استفاده ازهیچ یکبحث مختصری را تضمین می کند.هیچ یکیک کلمه کلیدی پایتون است و برای تعریف یک مقدار null یا بدون مقدار استفاده می شود. این مانند یک رشته خالی نیست، اما در زمینه تنظیم پارامترهای یک ابزار همان اثر را دارد.هیچ یکنوع داده خودش در پایتون است—یعنی،NoneType. این کلمه کلیدی با حروف بزرگ نوشته می شود و بنابراین استفاده ازهیچ یکنادرست است و باعث ایجاد خطا می شود. همچنین با استفاده از یک رشته با کاراکترهای یکسان و استفاده از آن یکسان نیست”هیچ یک”،”هیچ یک”،یا”هیچ یک”همچنین یک خطا ایجاد می کند. این کلمات مشابه می تواند منجر به سردرگمی شود، زیرا برخی از مقادیر پارامتر ابزارهای geoprocessing از NONE به عنوان یکی از گزینه ها استفاده می کنند. بنابراین، برای یک سناریوی متفاوت، مقدار یک پارامتر می تواند به عنوان < تنظیم شودparameter_name>=”NONE”. در این مثال،هیچ یکیک رشته است و با کلمه کلیدی پایتون یکسان نیستهیچ یک. بنابراین، وقتی می بینید”هیچ یک”در یک مثال کد از اسناد ابزار، پارامتر روی این رشته تنظیم شده است که معنای خاصی برای آن ابزار دارد. این بدان معنا نیست که پارامتر روی مقدار صفر تنظیم شده است.
در مثالهای تا کنون، پارامترهای ابزار از نام فایل واقعی (به عنوان مثال، جادهها) استفاده میکنند. بنابراین، نام فایل ها سخت کد شده است. یعنی پارامترها به عنوان متغیر تنظیم نمی شوند، بلکه مستقیماً از مقادیر استفاده می کنند. اگرچه این نحو صحیح است و به خوبی کار می کند، اغلب مفیدتر است که کد خود را با استفاده از متغیرها برای پارامترها به جای استفاده از مقادیر کدگذاری شده انعطاف پذیر کنید. ابتدا باید متغیرها را ایجاد کنید و به آنها یک مقدار اختصاص دهید. سپس می توانید از متغیرها برای پارامترها استفاده کنید. این متغیرها هنگام فراخوانی تابع به ابزار ارسال می شوند. به عنوان مثال، در مورد ابزار Clip، به شکل زیر است:
واردات کمان
arcpy.env.workspace = “C:/Data”
infc = “streams.shp”
clipfc = “study.shp”
outfc = “result.shp”
arcpy.Clip_analysis(infc، clipfc، outfc)
توجه داشته باشید که متغیرها نیازی به داشتن نام مشابه با پارامترهای موجود در نحو ابزار ندارند. به عنوان مثال، در سینتکس ابزار Clip، نام پارامتر ویژگی های ورودی in_features است، در حالی که اسکریپت از infc به عنوان متغیر استفاده می کند. شما اساساً می توانید از هر نام متغیر معتبری استفاده کنید، اما تمرین خوبی است که به متغیرهای خود نام های معنی دار بدهید.
در این اسکریپت مثال، نام مجموعههای داده هنوز در خود اسکریپت کدگذاری شده است، اما نه در خط خاصی از کد که ابزار Clip را فراخوانی میکند. مرحله منطقی بعدی این است که مقادیر متغیرها توسط یک کاربر یا اسکریپت یا ابزار دیگری ارائه شود، به این معنی که نام فایل دیگر در اسکریپت ظاهر نمی شود. برای مثال، کد زیر ابزار Copy را اجرا میکند و کلاسهای ویژگی ورودی و خروجی از ورودی کاربر با استفاده ازarcpy.GetParameterAsText()عملکرد:
واردات کمان
infc = arcpy.GetParameterAsText(0)
outfc = arcpy.GetParameterAsText(1)
arcpy.Copy_management(infc, outfc)
تنظیم پارامترهای ابزار بر اساس ورودی کاربر معمولاً برای ابزارهای اسکریپت استفاده می شود. کار با متغیرها به این روش به شما انعطاف بیشتری می دهد و بسیاری از کدهای شما را قابل استفاده مجدد می کند.
توجه داشته باشید:وقتی شروع به نوشتن اسکریپت های پردازش جغرافیایی می کنید، استفاده از کدنویسی سخت برای پارامترهای ابزار خوب است. با این حال، استفاده از متغیرها به شدت تشویق می شود. در نهایت، شما در حال توسعه اسکریپت ها و ابزارهایی هستید که می توانند با دیگران به اشتراک گذاشته شوند و این ابزارها معمولاً به استفاده از متغیرها نیاز دارند. علاوه بر این، متغیرها استفاده مجدد از بخشهایی از کد شما را آسانتر میکنند.
در اینجا چند یادآوری سریع در مورد نام متغیرها در پایتون وجود دارد. نام متغیرها می تواند از هر ترکیبی از کاراکترهای معتبر تشکیل شود. با این حال، اتخاذ یک سبک کدنویسی ثابت توصیه می شود. برای مثال، راهنمای سبک برای کد پایتون استفاده از تمام نویسههای کوچک و استفاده از زیرخط (_) را تنها در صورتی توصیه میکند که خوانایی را بهبود بخشد – برای مثال my_clip یا clip_result. نام متغیرها نیز باید کوتاه (اما معنی دار) باشد تا نیاز به تایپ و اشتباهات تایپی مرتبط محدود شود – به عنوان مثال، clipfc به جای clipfeatureclass.
5.6کار بانتیجهاشیاء
ArcPy خروجی یک ابزار را به صورت a برمی گرداندنتیجههدف – شی. هنگامی که خروجی یک ابزار یک کلاس ویژگی جدید یا به روز شده باشد،نتیجهشی شامل مسیر مجموعه داده است. با این حال، برای ابزارهای دیگر،نتیجهشی می تواند از یک رشته، یک عدد یا یک مقدار بولی تشکیل شده باشد. یکی از مزیت هاینتیجهاشیاء این است که می توانید اطلاعات مربوط به عملکرد ابزارها را پیگیری کنید. این نه تنها خروجی، بلکه پیام ها و پارامترها را نیز شامل می شود.
به عنوان مثال، در کد زیر، یک ابزار geoprocessing اجرا می شود و خروجی به صورت یکنتیجههدف – شی:
واردات کمان
arcpy.env.workspace = “C:/Data”
mycount = arcpy.GetCount_management(“streams.shp”)
چاپ (شماره من)
این کد نمایش رشته ای را نشان می دهدنتیجهشی – به عنوان مثال:
3153
هنگامی که خروجی یک ابزار از یک کلاس ویژگی تشکیل شده باشد،نتیجهشی شامل مسیر مجموعه داده است. به عنوان مثال، کد زیر ابزار Clip را اجرا می کند:
واردات کمان
arcpy.env.workspace = “C:/Data”
myresult = arcpy.Clip_analysis(“streams.shp”, “study.shp”,
“result.shp”)
چاپ (نتیجه من)
اجرای کد، نمایش رشته ای از مسیر به مجموعه داده خروجی را نشان می دهد:
C:/Data/result.shp
درنتیجهشی را می توان به عنوان ورودی برای تابع دیگری استفاده کرد. به عنوان مثال، در کد زیر، یک کلاس ویژگی با استفاده از ابزار Buffer بافر شده است. کلاس ویژگی چند ضلعی خروجی به عنوان یک شی برگردانده می شود و شی به عنوان ورودی ابزار Get Count به صورت زیر استفاده می شود:
واردات کمان
arcpy.env.workspace = “C:/Data/study.gdb”
buffer = arcpy.Buffer_analysis(“str”، “str_buf”، “100 METERS”)
count = arcpy.GetCount_management(بافر)
چاپ (شمارش)
احتمالاً می توانید ببینید که این به کجا می رود. شما می توانید یک سری عملیات geoprocessing مانند ModelBuilder ایجاد کنید و تنها خروجی نهایی مورد نظر به برنامه ای که اسکریپت را فراخوانی کرده است برگردانده می شود.
درنتیجههمانطور که در ادامه نشان داده شده است، شی نیز دارای ویژگی ها و روش هایی است، در حالی که بخش 5.12 روش های مربوط به پیام ها را پوشش می دهد.
اگرچه بسیاری از ابزارها تنها یک خروجی دارند، برخی از ابزارها خروجی های متعددی دارند. درgetOutput()روش ازنتیجهشی می تواند با استفاده از یک عدد شاخص به صورت زیر خروجی خاصی به دست آورد:
count = arcpy.GetCount_management(buffer).getOutput(0)
خروجی ها نیز نمایه می شوند، بنابراین می توانید مستقیماً از یک عدد شاخص برای به دست آوردن یک نتیجه خاص استفاده کنید:
count = arcpy.GetCount_management(بافر)[0]
توجه داشته باشید:برای ابزارهایی که تنها یک خروجی دارند، از جمله ابزار Get Count، نیازی به استفاده نیستgetOutput()یا یک عدد شاخص
5.7کار با جعبه ابزار
هنگامی که ArcPy به پایتون وارد می شود، تمام جعبه ابزارهای سیستم در دسترس هستند. هنگامی که ابزارهای سفارشی ایجاد و در یک جعبه ابزار سفارشی ذخیره می شوند، این ابزارها در پایتون تنها با وارد کردن جعبه ابزار سفارشی قابل دسترسی هستند. بنابراین، حتی اگر یک جعبه ابزار سفارشی به پروژه ای در ArcGIS Pro اضافه شده باشد، پایتون از این جعبه ابزار تا زمانی که وارد نشده باشد آگاه نیست. واردات با استفاده ازarcpy.ImportToolbox()عملکرد. کد زیر نحوه وارد کردن جعبه ابزار را نشان می دهد:
واردات کمان
arcpy.ImportToolbox(“C:/Data/sampletools.tbx”)
توجه داشته باشید کهImportToolbox()تابع به فایل واقعی روی دیسک ارجاع می دهد—یعنی فایل جعبه ابزار (tbx.) نه به نام جعبه ابزار.
توجه داشته باشید:درAddToolbox()تابع معادل استImportToolbox()تابع، و نحو یکسان است. تمام مثالهای کد موجود در این بخش هنگام استفاده به یک اندازه معتبر هستندAddToolbox().
پس از وارد کردن جعبه ابزار، سینتکس دسترسی به ابزار در پایتون است
arcpy.<toolname>_<toolboxalias>
این نحو مانند دسترسی به ابزارها از جعبه ابزار سیستم است. ArcPy برای دسترسی و اجرای ابزار صحیح به نام مستعار جعبه ابزار بستگی دارد. جعبه ابزارهای سیستم دارای نام مستعار کاملاً مشخصی هستند، اما ممکن است این مورد برای جعبه ابزارهای سفارشی صادق نباشد. نام مستعار جعبه ابزار هم با نام (که نام فایل فایل .tbx است) و هم با برچسب (که نام نمایشی جعبه ابزار است) متفاوت است. در حالی که به جعبه ابزار به طور پیش فرض یک نام مستعار داده می شود (مثلاً NewToolbox)، تمرین خوبی است که همیشه یک نام مستعار جعبه ابزار سفارشی همراه با نام و برچسب ابزار تعریف شود. با این حال، اگر یک نام مستعار جعبه ابزار تعریف نشده باشد، یک نام مستعار موقت را می توان به عنوان پارامتر دوم تنظیم کرد.ImportToolbox()عملکرد، به شرح زیر است:
arcpy.ImportToolbox(“sampletools.tbx”، mytools)
پس از تنظیم نام مستعار، ابزارهای موجود در جعبه ابزار با استفاده از پایتون قابل دسترسی هستند. به عنوان مثال، اگر فایل sampletools.tbx حاوی ابزاری به نام MyModel باشد، سینتکس دسترسی به این ابزار است.
arcpy.MyModel_mytools(<parameters>)
یا به طور متناوب:
arcpy.mytools.MyModel(<parameters>)
درImportToolbox()تابع همچنین خدمات پردازش جغرافیایی را از اینترنت یا سرور محلی اضافه می کند – برای مثال، با استفاده از یک فایل اتصال ArcGIS Server (ags.).
اگرچه ArcPy دسترسی به تمام ابزارهای geoprocessing در ArcGIS Pro را فراهم می کند، ابزارهایی که در دسترس هستند به سطح مجوز (Basic، Standard یا Advanced) و اینکه آیا افزونه هایی در دسترس هستند بستگی دارد. علاوه بر این، جعبه ابزارهای سفارشی ممکن است نصب شوند که ابزارهای جدیدی را اضافه می کند.
هنگامی که یک ابزار شناسایی شد، می توان به نحو ابزار با استفاده از داخلی پایتون دسترسی پیدا کرد.کمک()عملکرد. به عنوان مثال، کد زیر نحو ابزار Clip را چاپ می کند:
print(help(arcpy.Clip_analysis))
اگرچه دسترسی مستقیم به نحو از داخل پایتون مفید است، توصیه میشود صفحات راهنمای آنلاین یک ابزار را مشاهده کنید زیرا راهنما توضیحی درباره ابزار و پارامترهای آن و همچنین نمونههای کد پایتون ارائه میدهد.
5.8با استفاده از توابع
یک تابع در پایتون وظیفه خاصی را انجام می دهد. تقریباً تمام ابزارهای ژئوپردازش در ArcGIS Pro به عنوان توابع در ArcPy ارائه می شوند. علاوه بر این، ArcPy چندین عملکرد را ارائه می دهد که ابزار نیستند. توابع میتوانند مجموعههای داده را فهرست کنند، ویژگیهای یک مجموعه داده را بازیابی کنند، وجود دادهها را بررسی کنند، نام مجموعههای داده را تأیید کنند، و بسیاری از کارهای مفید دیگر را انجام دهند. این توابع برای گردش های کاری پایتون طراحی شده اند و بنابراین فقط در ArcPy و نه به عنوان ابزار در ArcGIS Pro در دسترس هستند. این توابع گاهی اوقات به عنوان توابع غیر ابزاری نیز شناخته می شوند. به طور خلاصه، تقریباً تمام ابزارهای geoprocessing در ArcGIS Pro توابعی در ArcPy هستند، اما همه توابع ArcPy ابزارهای geoprocessing در ArcGIS Pro نیستند.
شکل کلی یک تابع مانند یک ابزار است. یک تابع دارای پارامترهایی است (که به آن آرگومان نیز گفته می شود)، که می تواند مورد نیاز یا اختیاری باشد. یک تابع مقادیر را برمی گرداند. این مقادیر می توانند یک مسیر به یک مجموعه داده، یک رشته، یک عدد، یک مقدار بولی یا یک شی ژئوپردازنده باشند.
نحو یک تابع در ArcPy مانند ابزارها است:
arcpy.<functionname>(<arguments>)
به عنوان مثال، کد زیر تعیین می کند که آیا یک مجموعه داده وجود دارد یا خیر، و سپس هر کدام را چاپ می کنددرست است، واقعییانادرست:
واردات کمان
print(arcpy.Exists(“C:/Data.streams.shp”))
درarcpy.Exists()تابع یک مقدار بولی برمی گرداند. توابع دیگر انواع دیگری از مقادیر، از جمله رشته ها و اعداد را برمی گرداند.
توابع ArcPy زیادی وجود دارد که می توان آنها را به دسته های زیر تقسیم کرد:
- ArcGIS Online/Portal
- نشانگرها
- ذخیره اطلاعات
- توصیف داده ها
- محیط ها و تنظیمات
- زمینه های
- عمومی
- توابع داده های عمومی
- مدیریت پایگاه ژئودیتابیس
- هندسه
- دریافت و تنظیم پارامترها
- صدور مجوز و نصب
- داده های فهرست شده
- سابقه ثبت نام
- پیام رسانی و مدیریت خطا
- کادر گفتگوی پیشرفت
- انتشار
- شطرنجی
- ارجاعات و دگرگونی های فضایی
- ابزار و جعبه ابزار
این دستهها اساساً برای ارائه یک سازماندهی منطقی از توابع ایجاد میشوند، اما نام این دستهها در نحو Python ظاهر نمیشوند. برخلاف ابزارها، این توابع همیشه بدون اشاره به دسته، مستقیماً فراخوانی می شوند. ArcGIS Pro به ارائه لیست کاملی از توابع ArcPy و شرح مفصلی از هر یک کمک می کند. فصل های بعدی چندین مورد از این عملکردها را مجدداً بررسی می کنند.
از نظر فنی، تقریباً تمام ابزارهای ژئوپردازش توابعی در ArcPy هستند و مانند هر تابع پایتون دیگری قابل دسترسی هستند. برای جلوگیری از سردرگمی، توابع ArcPy به توابع ابزار و توابع غیر ابزار تقسیم می شوند. چندین تفاوت مهم بین این دو وجود دارد:
- مستندات در بخشهای مختلف راهنمای ArcGIS Pro هستند. ابزارها در زیر مرجع ابزار مستند شده اند. هنگام اجرای یک ابزار در ArcGIS Pro، اسناد را میتوان از کادر محاورهای ابزار نیز دریافت کرد. توابع Nontool فقط در اسناد ArcPy در زبانه Python در صفحات راهنما ArcGIS Pro مستند می شوند.
- ابزارها بر اساس سطح مجوز (پایه، استاندارد و پیشرفته) و با پسوند (تحلیلگر سه بعدی، تحلیلگر شبکه، تحلیلگر فضایی و موارد دیگر) مجوز دارند. Tool Reference سطح مجوز مورد نیاز برای هر ابزار را نشان می دهد. از سوی دیگر، توابع غیر ابزاری به طور جداگانه مجوز ندارند. همه توابع غیرابزاری ArcPy برای استفاده با ArcPy، مستقل از سطح مجوز، در دسترس هستند.
- ابزارها پیام های پردازش جغرافیایی را تولید می کنند که از طریق عملکردهای مختلف قابل دسترسی است. توابع غیر ابزار این پیام ها را تولید نمی کنند.
- ابزارهای فراخوانی مستلزم استفاده از نام مستعار جعبه ابزار یا نام ماژول هستند، در حالی که توابع غیرابزاری اینگونه نیستند.
فصل های بعدی بسیاری از این توابع غیرابزاری را بررسی می کنند.
5.9استفاده از کلاس ها برای پارامترهای ابزار
بسیاری از پارامترهای ابزار ساده هستند – به عنوان مثال، کلاس های ویژگی، نام فیلدها و مقادیر عددی. کار با آنها نسبتاً آسان است و اغلب می توان با استفاده از یک مقدار رشته ای ساده آنها را مشخص کرد. با این حال، برخی از پارامترهای ابزار پیچیدهتر هستند – برای مثال، استفاده از یک سیستم مختصات به عنوان پارامتر، یا یک جدول طبقهبندی مجدد هنگام کار با دادههای شطرنجی. این یکی از سناریوهایی است که در آن کلاس ها وارد بازی می شوند. کلاس های ArcPy اغلب به عنوان میانبر برای پارامترهای ابزار استفاده می شوند که در غیر این صورت معادل پیچیده تری دارند. از کلاس ها می توان برای ایجاد اشیاء استفاده کرد و پس از ایجاد شی، می توان از ویژگی ها و روش های آن استفاده کرد.
مثال ArcPy را در نظر بگیریدenvکلاسی که قبلاً در این فصل استفاده شد. محیط ها به عنوان ویژگی های در معرضenvکلاس مثلا،فضای کاریک خاصیت از استenvکلاس، بنابراین نحو تبدیل می شودenv.workspace.
سینتکس برای تنظیم ویژگی یک کلاس در ArcPy است
arcpy.<classname>.<property> = <value>
همانطور که قبلاً بحث شد، کد تنظیم فضای کاری فعلی به شرح زیر است:
واردات کمان
arcpy.env.workspace = “C:/Data”
یکی دیگر از کلاس های ArcPy که اغلب استفاده می شود، کلاس استمرجع فضاییکلاس این کلاس دارای چندین ویژگی از جمله پارامترهای سیستم مختصات است. با این حال، برای کار با این ویژگی ها، ابتدا کلاس باید نمونه سازی شود، که به معنای ایجاد یک شی است. یک کلاس مانند یک طرح اولیه برای اشیا است و شما می توانید یک شی را بر اساس طرح اولیه با استفاده از نمونه ای از کلاس ایجاد کنید. نحو برای یک نمونه جدید از یک کلاس است
arcpy.<classname>(پارامترها)
به عنوان مثال، کد برای ایجاد یک نمونه جدید ازarcpy.SpatialReferenceکلاس به شرح زیر است:
واردات کمان
prjfile = “C:/Data/myprojection.prj”
spatialref = arcpy.SpatialReference(prjfile)
در این مثال،مرجع فضاییکلاسی است که a را ایجاد می کندمرجع فضاییشی نامیده می شودفضاییبا خواندن یک فایل طرح ریزی موجود (prj). فایل .prj واقعی از قبل روی دیسک وجود دارد و برای ایجاد شی یا نمونه کلاس استفاده می شود. در این مثال،مرجع فضایینام کلاس ArcPy است و تنها یک راه صحیح برای نوشتن آن وجود دارد. نام متغیر spatialref، از سوی دیگر، توسط نویسنده اسکریپت انتخاب میشود و هر نام معنیدار دیگری میتواند استفاده شود – به عنوان مثال، sr یا my_spref.
پس از ایجاد شی، می توانید با ویژگی های شی کار کنید. به عنوان مثال، در موردمرجع فضاییکلاس، می توانید با هر یک از پارامترهای خاصی که یک فایل مرجع فضایی را تعریف می کند، مانند پارامترهای سیستم مختصات، تلورانس ها و دامنه ها کار کنید. به عنوان مثال، کد زیر یک شی مرجع فضایی را بر اساس یک فایل .prj موجود ایجاد می کند و سپس ازنامویژگی برای به دست آوردن نام مرجع مکانی به شرح زیر است:
واردات کمان
prjfile = “C:/Data/streams.prj”
spatialref = arcpy.SpatialReference(prjfile)
چاپ (spatialref.name)
اجرای کد، نام مرجع فضایی را چاپ می کند – به عنوان مثال:
NAD_1983_StatePlane_Florida_East_FIPS_0901_Feet
کلاس ها اغلب برای جلوگیری از استفاده از رشته های طولانی و پیچیده استفاده می شوند. یک مثال خوب استفاده از کلاس ها برای پارامترهای ابزار پیچیده است. بیشتر پارامترهای ابزار با استفاده از رشته های ساده از جمله نام مجموعه داده ها، مسیرها، کلمات کلیدی، نام فیلدها و موارد دیگر تعریف می شوند. با این حال، تعریف برخی از پارامترها با رشته های ساده سخت تر است، زیرا پارامترها به ویژگی های بیشتری نیاز دارند. به عنوان مثال، به سیستم مختصات یک کلاس ویژگی فکر کنید. برای یک shapefile، در یک فایل .prj ذخیره می شود – یک فایل متنی معمولی با پسوند فایل .prj. باز کردن یک فایل .prj در Notepad چیزی شبیه به مثال در شکل است.
کار با این نوع رشته می تواند کمی سخت باشد. اگر بتوانید به سادگی با استفاده از نام سیستم مختصات یا ارجاع به فایل .prj که حاوی مقدار رشته است به آن مراجعه کنید، بسیار ساده تر خواهد بود. کار بامرجع فضاییکلاس راهی برای انجام این وظیفه است.
به عنوان مثال، یکمرجع فضاییشی را می توان ایجاد کرد و برای تعریف سیستم مختصات خروجی یک کلاس ویژگی جدید استفاده کرد. کلاس ویژگی جدید با استفاده از ابزار Create Feature Class ایجاد می شود. نحو ابزار Create Feature Class به شرح زیر است:
CreateFeatureclass(out_path، out_name، {geometry_type}،
{template}، {has_m}، {has_z}،
{spatial_reference}، {config_keyword}،
{spatial_grid_1}، {spatial_grid_2}،
{spatial_grid_3})
کد زیر یک شی مرجع فضایی ایجاد می کند و از آن برای تعریف سیستم مختصات خروجی یک کلاس ویژگی جدید (خالی) استفاده می کند:
واردات کمان
out_path = “C:/Data”
out_name = “lines.shp”
prjfile = “C:/Data/streams.prj”
spatialref = arcpy.SpatialReference(prjfile)
arcpy.CreateFeatureclass_management(out_path، out_name، “POLYLINE”،
“”، “”، “”، spatialref)
با استفاده ازمرجع فضاییشی بسیار ساده تر از تلاش برای کار با مقدار رشته واقعی موجود در فایل .prj است.
توجه داشته باشید:به عنوان یادآوری، پارامترهای ابزار اختیاری را می توان از نحو خارج کرد، مگر اینکه توسط یک پارامتر اختیاری که متفاوت از پیش فرض مشخص شده است، دنبال شوند. یک رشته خالی (“”) نشان دهنده استفاده از مقادیر پیش فرض برای پارامترهای اختیاری است. در کد مثال، سه پارامتر اختیاری قبل از پارامتر مرجع فضایی وجود دارد – بنابراین، از سه رشته خالی استفاده می شود. یک جایگزین این است که به پارامتر با نام اشاره کنید—یعنی،spatial_reference = spatialref، در این صورت نیازی به استفاده از رشته های خالی برای رد شدن از سایر پارامترهای اختیاری نیست.
5.10کار با سیستم های مختصات
بخش قبلی از یک فایل .prj موجود برای ایجاد یک استفاده کردمرجع فضاییهدف – شی. این رویکرد تا حدودی برای شیپ فایل ها منحصر به فرد است، زیرا فایل ها سیستم مختصات خود را در یک فایل جداگانه ذخیره می کنند. برای مثال یک شکل فایل به نام rivers از چندین فایل مختلف تشکیل شده است که یکی از آنها rivers.prj است. سایر قالبهای دادههای مکانی اطلاعات مرجع مکانی خود را در یک فایل جداگانه ذخیره نمیکنند و بنابراین رویکرد دیگری مورد نیاز است.
اولین جایگزین استفاده ازarcpy.Describe()یاarcpy.da.Describe()عملکرد. این رویکرد می تواند برای تعیین اطلاعات مرجع مکانی برای هر مجموعه داده، از جمله کلاس های ویژگی، مجموعه داده های شطرنجی، TIN ها و غیره استفاده شود. استفاده از این توابع به طور مفصل در فصل 6 پوشش داده شده است.
گزینه دوم استفاده از نام سیستم مختصات است. به عنوان مثال، کد استفاده از نام مثال قبلی به شرح زیر است:
sr = arcpy.SpatialReference(“NAD 1983 StatePlane Texas Central FIPS
4203 (فوت ایالات متحده)”)
نام پروجکشن به عنوان پارامتر ورودی برایمرجع فضاییکلاس وناماموال یکسان نیستند، که می تواند منبع سردرگمی باشد. به مثال زیر توجه کنید:
واردات کمان
sr = arcpy.SpatialReference (“مخروطی منطقه مساوی آلبر هاوایی”)
چاپ (sr.name)
نتیجه این است
Hawaii_Albers_Equal_Area_Conic
فاصله ها در نام طرح ریزی با زیرخط (_) در قسمت جایگزین می شوندنامویژگی. این رایج ترین تفاوت است، اما برخی از سیستم های مختصات دارای تفاوت های اضافی هستند. به مثال زیر توجه کنید:
واردات کمان
sr = arcpy.SpatialReference(“NAD 1983 HARN Florida GDL Albers
(متر)”)
چاپ (sr.name)
ویژگی نام شامل واحدهای زیر نمی شود:
NAD_1983_HARN_Florida_GDL_Albers
یکی دیگر از مسائل رایج استفاده از سبک های نوشتاری جایگزین است. به عنوان مثال، نام طرح ریزی “UTM Zone 10N NAD1983” یک خطا ایجاد می کند زیرا تنها نام شناخته شده “NAD 1983 UTM Zone 10N” است، حتی اگر هر دو سبک در اسناد فراداده معمولی استفاده می شوند. این تفاوت های ظریف استفاده از نام طرح ریزی را مستعد خطا می کند. برای غلبه بر برخی از این چالش ها،arcpy.ListSpatialReferences()همانطور که در انتهای این بخش توضیح داده شده است، تابع می تواند نام پروجکشن صحیح را جستجو کند.
گزینه سوم استفاده از کد کارخانه به جای نام است. این کد به عنوان شناسه شناخته شده یا WKID نیز نامیده می شود. کد مربوط به همان سیستم مختصات مورد استفاده در مثال قبلی است
sr = arcpy.SpatialReference(2277)
برای نشان دادن این که چگونه این کار می کند، مثال زیر از WKID یک سیستم مختصات استفاده می کند و سپس نام آن را برای تایید چاپ می کند، اینکه آیا سیستم مختصات پیش بینی شده است یا جغرافیایی، و واحدهای خطی کدامند. کد به شرح زیر است:
واردات کمان
sr = arcpy.SpatialReference(2277)
چاپ (sr.name)
چاپ (نوع sr.)
print(sr.linearUnitName)
نتیجه به شرح زیر است:
NAD_1983_StatePlane_Texas_Central_FIPS_4203_Feet
برنامه ریزی شده، پیش بینی شده
پا_ایالات متحده
اگرچه ممکن است در ابتدا به خاطر سپردن یک شماره شناسه منحصر به فرد برای یک سیستم مختصات غیر منطقی به نظر برسد، اما در بسیاری از گردشهای کاری GIS، تنها با تعداد معدودی از سیستمهای مختصات منحصربهفرد کار میکنید. دسترسی به این مقادیر WKID مفید خواهد بود و کد شما را بسیار کوتاهتر از کار با نامهای کامل میکند.
توجه داشته باشید:تمام سیستم های مختصات مورد استفاده در ArcGIS در دو فایل جداگانه در صفحات راهنمای ArcGIS Pro مستند شده اند. فایل های geographic_coordinate_systems.pdf و projected_coordinate_systems.pdf به طور منظم به روز می شوند. این مستندات شامل نام ها و مقادیر WKID همه سیستم های مختصات پشتیبانی شده است. همچنین صفحه راهنمای «سیستمهای مختصات، پیشبینیها و تبدیلها» را در اینجا ببینیدhttps://pro.arcgis.com/en/pro-app/arcp/classes/spatialreference.htm.
به جای جستجوی دستی مقدار WKID برای یک سیستم مختصات، میتوانید از آن نیز استفاده کنیدکارخانه کددارایی ازمرجع فضاییکلاس به شرح زیر
واردات کمان
prjfile = “C:/Data/bike_routes.prj”
sr= arcpy.SpatialReference(prjfile)
چاپ (sr.factoryCode)
این کد مقدار WKID را چاپ می کند:
2277
در نهایت، شما می توانید یک ایجاد کنیدمرجع فضاییشیء با استفاده از یک رشته متنی معروف یا فایل WKT. این قالب در اصل توسط کنسرسیوم فضایی باز (OGC) توسعه داده شد. فایلهای WKT بهطور گسترده در جامعه مکانی متنباز استفاده میشوند، بنابراین به شما امکان میدهد اطلاعات سیستم مختصری را بین نرمافزار منبع باز و ArcPy در اسکریپتهای خود مبادله کنید. نمونه کد در مستندات ارائه شده استمرجع فضاییکلاس
برای تسهیل شناسایی نام های مرجع مکانی صحیح، ازListSpatialReferences()عملکرد جستجو در همه نام های معتبر. نحو کلی این تابع است
arcpy.ListSpatialReferences({wild_card}، {spatial_reference_type})
کارت وحشی امکان جستجو بر اساس نام را فراهم می کند، در حالی که نوع مرجع فضایی نتایج را بر اساس نوع فیلتر می کند – یعنی GCS برای سیستم های مختصات جغرافیایی و PCS برای سیستم های مختصات پیش بینی شده. به عنوان مثال، کد زیر تمام نامهای مرجع فضایی را که هاوایی در نام خود دارند و پیشبینی میشوند، چاپ میکند:
واردات کمان
srs_hawaii = arcpy.ListSpatialReferences(“*هاوایی*”، “PCS”)
برای sr در srs_hawaii:
چاپ (sr)
در نتیجه نام چندین سیستم مختصات برای هاوایی چاپ می شود. خط اول نتایج به شرح زیر است:
سیستمهای مختصات پیشبینیشده/قاره/آمریکای شمالی/مخروطی منطقه مساوی آلبرز هاوایی
اطلاعات واجد شرایط در مورد هر مرجع فضایی گنجانده شده است که با اسلش های رو به جلو جدا شده است. این ساختار نحوه حرکت شما به یک مرجع فضایی خاص در ArcGIS Pro را نشان می دهد.
برای محدود کردن جستجوی خود، می توانید چندین لیست ایجاد کنید و عناصر مشترک هر دو را تعیین کنید. این به راحتی با استفاده از مجموعه هایی که گزینه های بیشتری برای دستکاری دارند انجام می شود. برای مثال، کد زیر فهرستی از تمام نامهای مرجع فضایی در فلوریدا را که از سیستم مختصات هواپیمای ایالتی (SPCS) با واحدهای فوت استفاده میکنند، چاپ میکند:
واردات کمان
srs_fl = arcpy.ListSpatialReferences(“*فلوریدا*”)
srs_sp = arcpy.ListSpatialReferences(“*State Plane*”)
srs_ft = arcpy.ListSpatialReferences(“*Feet*”)
srs = set(srs_fl) & set(srs_sp) & set(srs_ft)
برای sr در srs:
چاپ (sr)
این اسکریپت سه لیست مختلف را ایجاد می کند که هر کدام از یک علامت عام متفاوت استفاده می کنند. این لیست ها به یک مجموعه تبدیل می شوند و عناصر مشترک هر سه مجموعه با استفاده از عملگر بیتی AND (&).
هنگامی که نام مرجع مکانی صحیح شناسایی شد، می توان از آن به عنوان پارامتر استفاده کردمرجع فضاییکلاس
کار با اطلاعات مرجع مکانی یک جنبه حیاتی در اکثر اسکریپت های پردازش جغرافیایی است. بنابراین برای مجموعه دادههای رایج، مفید است که نام دقیق یا کد کارخانه به راحتی در دسترس باشد.
5.11استفاده از محیط ها
محیطها اساساً پارامترهای پنهانی هستند که بر نحوه اجرای یک ابزار تأثیر میگذارند. قبلاً نحوه تنظیم محیط در پایتون را با استفاده ازenvکلاس این بخش این تنظیمات را با جزئیات بیشتری پوشش میدهد، زیرا محیطها برای کنترل جریانهای پردازش جغرافیایی ضروری هستند.
محیط ها به عنوان ویژگی های در معرضenvکلاس این ویژگی ها مقادیر فعلی را بازیابی یا تنظیم می کنند. هر ملک دارای یک نام و یک برچسب است. برچسبها در کادر محاورهای Environments در ArcGIS Pro نمایش داده میشوند، اما پایتون فقط با نامها کار میکند. سینتکس برای دسترسی به خصوصیات از کلاس محیط است
arcpy.env.<property>
به عنوان مثال، برای تنظیم فضای کاری فعلی، از کد زیر استفاده کنید:
واردات کمان
arcpy.env.workspace = “C:/Data”
درenvکلاس دارای بسیاری از ویژگی های دیگر است. یک لیست کامل را می توان در اسناد ArcPy یافت. برخی از ویژگی های مهم عبارتند از وسعت، سیستم مختصات خروجی، فضای کاری خراش و دامنه XY. برخی از ویژگی ها یا برای کلاس های ویژگی یا مجموعه داده های شطرنجی خاص هستند. به عنوان مثال، اندازه سلول، فشرده سازی و ماسک فقط برای مجموعه داده های شطرنجی استفاده می شود. کد زیر اندازه سلول را 30 تنظیم می کند:
واردات کمان
arcpy.env.cellSize = 30
این کد به این معنی است که هر رستر خروجی ایجاد شده توسط ابزارهای geoprocessing با استفاده از اندازه سلول 30 بدون در نظر گرفتن اندازه سلول رسترهای ورودی ایجاد می شود. واحد توسط سیستم مختصات برای خروجی ها، محیط دیگری تنظیم می شود.
خواص ازenvکلاس نه تنها محیط هایی را برای اجرای ابزارهای ژئوپردازش مشخص می کند، بلکه می تواند برای بازیابی مقادیر فعلی آنها نیز استفاده شود. به عنوان مثال، کد زیر تنظیمات فعلی را برای تحمل XY بازیابی می کند:
واردات کمان
print(arcpy.env.XYTolerance)
اجرای کد، مقدار فعلی پارامتر XY Tolerance را چاپ می کند. مقدار پیش فرض ازهیچ یکچاپ می شود مگر اینکه مقدار قبلاً تنظیم شده باشد.
برای مشاهده لیست کاملی از تمام خصوصیات کلاس env از عبارت استفاده کنیدdir()عملکرد، به شرح زیر است:
واردات کمان
print(dir(arcpy.env))
نتیجه این است
[‘MDomain’، ‘MResolution’، ‘MTolerance’، …]
یک محیط اضافی وجود دارد که مورد توجه ویژه است. ممکن است از فصل 3 به خاطر بیاورید که گزینه های geoprocessing شامل گزینه ای است که به ابزارهای geoprocessing اجازه می دهد مجموعه داده های موجود را بازنویسی کنند. در ArcGIS Pro، این گزینه بخشی از کادر محاورهای Environments نیست، بلکه ورودی جداگانهای در کادر گفتگوی گزینهها برای پروژه تحت Geoprocessing است. در ArcPy، رونویسی یکی از ویژگی های استenvکلاس مقدار پیش فرض این استرونویسی خروجیاموال استنادرست. کد زیر مقدار را بهدرست است، واقعی:
واردات کمان
arcpy.env.overwriteOutput = درست است
هنگام تست کد، تنظیم این ویژگی در اسکریپت معمول است زیرا به شما امکان میدهد خروجیهای اجرای قبلی همان اسکریپت را بدون نیاز به حذف دستی فایلها یا تغییر نام خروجیها، بازنویسی کنید.
5.12کار با پیام های ابزار
هنگامی که ابزارها اجرا می شوند، پیام هایی در مورد موفقیت یا عدم اجرای ابزار نوشته می شود. ارتباط بین ابزارها و کاربران با استفاده از پیام ها انجام می شود. اطلاعات معمول در این پیام ها شامل موارد زیر است:
- زمان دقیق شروع و پایان اجرای ابزار
- اطلاعات در مورد پیشرفت در اجرای ابزار (پیام های اطلاعاتی)
- هشدار در مورد مشکلات احتمالی در اجرای ابزار (پیام های هشدار)
- هر گونه خطایی که مانع از تکمیل ابزار شود (پیام های خطا)
وقتی ابزاری از داخل ArcGIS Pro اجرا میشود، پس از پایان اجرای ابزار، میتوان با کلیک کردن روی پیوند View Details در پایین کادر محاورهای ابزار، به این پیامهای geoprocessing دسترسی پیدا کرد. شکل نمونه ای از یک ابزار تکمیل شده را نشان می دهد.
وقتی روی View Details کلیک میکنید، کادر محاورهای که ظاهر میشود شامل جزئیات مربوط به پارامترها و محیطها و همچنین هرگونه پیام، خطا یا هشدار میشود.
پیام ها نیز در قسمت History ظاهر می شوند. میتوانید با استفاده از پیوند تاریخچه باز در پایین کادر محاورهای ابزار تکمیلشده، یا با باز کردن صفحه History از تب Analysis، این صفحه را مشاهده کنید. یک تاریخچه معمولی پس از اجرای یک ابزار در مثال در شکل نشان داده شده است. با نگه داشتن نشانگر روی ابزار اجرا شده یا کلیک کردن روی آن، همان پنجره پاپ آپی مانند پیوند View Details در کادر محاوره ای ابزار ظاهر می شود.
وقتی ابزاری از پنجره پایتون در ArcGIS Pro اجرا میشود، اگر موقعیتی مانع از تکمیل موفقیتآمیز ابزار شود، پیامهای خطا چاپ میشود. هنگامی که یک ابزار همانطور که انتظار می رود اجرا می شود، فقط یک ارجاع به آن استنتیجهچاپ اشیا مثال نشان می دهد که چگونه همان ابزار بافر با استفاده از پنجره پایتون اجرا می شود.
توجه داشته باشید که در مثال، محیط ها در کد گنجانده شده اند، اما می توانند در سطح برنامه ArcGIS Pro نیز تنظیم شوند.
هنگامی که ابزارها با استفاده از کد در پنجره پایتون اجرا می شوند، اجرای ابزار نیز به تاریخچه پردازش جغرافیایی اضافه می شود. با این حال، به غیر از زمان، ورودیها یکسان هستند و تاریخچه پردازش جغرافیایی نشان نمیدهد که آیا ابزاری با استفاده از جعبه محاورهای ابزار اجرا شده است یا از پنجره پایتون.
هنگامی که یک اسکریپت پایتون مستقل اجرا می شود، هیچ ورودی به تاریخچه پردازش جغرافیایی اضافه نمی شود. به عبارت دیگر، هیچ ارتباط مستقیمی بین یک اسکریپت در حال اجرا در ویرایشگر پایتون و ArcGIS Pro وجود ندارد. اسکریپت بدون در نظر گرفتن اینکه آیا ArcGIS Pro در حال اجرا است یا نه اجرا می شود و هیچ سابقه ای در ArcGIS Pro وجود ندارد که اسکریپت اجرا شده و ابزارها را اجرا کرده باشد.
همان کد یک اسکریپت پایتون مستقل را در IDLE در نظر بگیرید.
هنگامی که اسکریپت مطابق انتظار اجرا می شود، تنها چیزی که اتفاق می افتد این است که پوسته پایتون در خط فرمان باز می شود.
نتایج اجرای اسکریپت چندان آموزنده نیست. عدم وجود پیام خطا نشان می دهد که اسکریپت با موفقیت اجرا شده است، اما تنها راه برای بررسی این است که ArcGIS Pro را باز کنید و نتایج را بررسی کنید. برای آموزندهتر کردن اجرای اسکریپتهای مستقل، میتوانید پیامهای پردازش جغرافیایی را از داخل اسکریپت دریافت کنید. می توانید پیام ها را چاپ کنید، آنها را در یک فایل بنویسید، یا از آنها پرس و جو کنید. این را می توان با استفاده ازarcpy.GetMessages()عملکرد. این کد در شکل نشان داده شده است.
این کد همانطور که در شکل نشان داده شده است، پیام های پردازش جغرافیایی را روی مفسر تعاملی چاپ می کند.
کار با پیام ها نیازمند نگاه دقیق تر است. اولا، همه پیام ها دارای خاصیت شدت هستند. این ویژگی یک عدد صحیح با مقدار 0 (اطلاعات)، 1 (اخطار) یا 2 (خطا) است. جدول 5.1 این سه سطح از شدت را با جزئیات بیشتری توضیح می دهد.
سطح شدت | شرح |
شدت = 0 (پیام اطلاعاتی) | همانطور که از نام آن پیداست، این نوع پیام اطلاعاتی در مورد اجرا ارائه می دهد. این شامل اطلاعات کلی مانند پیشرفت ابزار، زمان شروع و تکمیل ابزار و اطلاعات مربوط به نتایج ابزار است. این پیام ها هرگز برای نشان دادن مشکلات استفاده نمی شوند. |
شدت = 1 پیام هشدار | پیام های هشدار دهنده یک مشکل احتمالی را نشان می دهد. این می تواند موقعیتی باشد که ممکن است در حین اجرای ابزار مشکل ایجاد کند یا وضعیتی باشد که ممکن است نتیجه آن چیزی نباشد که شما انتظار دارید. پیام های اخطار مانع از اجرای یک ابزار نمی شوند، اما بازرسی را تضمین می کنند. |
شدت = 2 (پیام خطا) | پیام های خطا نشان می دهد که یک موقعیت مانع از اجرای فرم ابزار می شود. به طور معمول، این بدان معنی است که یک یا چند تنظیمات پارامتر نامعتبر است. |
هر دو پیام هشدار و خطا با کد شناسایی شش رقمی همراه هستند. کدهای شناسه مستند هستند و شرح هر کد شناسایی ممکن است در شناسایی علل مشکلات احتمالی و نحوه برخورد با آنها مفید باشد.
پیامهای آخرین اجرای ابزار توسط ArcPy نگهداری میشوند و با استفاده از آن قابل بازیابی هستندGetMessages()عملکرد. این تابع یک رشته منفرد حاوی تمام پیامهای ابزاری که آخرین اجرا شده را برمیگرداند. پیام ها را می توان با ارائه آرگومان شدت فیلتر کرد.
نحو اصلی برای بازیابی پیام ها و چاپ آنها است
print(arcpy.GetMessages())
در اینجا یک مثال برای بازیابی پیام ها برای ابزار Clip در یک اسکریپت مستقل آورده شده است:
واردات کمان
arcpy.env.workspace = “C:/Data”
infc = “streams.shp”
clipfc = “study.shp”
outfc = “result.shp”
arcpy.Clip_analysis(infc، clipfc، outfc)
print(arcpy.GetMessages())
اجرای کد منجر به لیستی از پیام ها مانند موارد زیر می شود:
زمان شروع: 19-19 مارس 18:20:51
تجزیه و تحلیل ویژگی های ورودی…
در حال انحلال ویژگی های کلیپ…
برش دادن ویژگی های ورودی…
موفقیت آمیز در 19-19 مارس، ساعت 6:20:51 بعد از ظهر (زمان سپری شده: 0.45 ثانیه)
پیام های فردی را می توان با استفاده ازarcpy.GetMessage()تابع (توجه داشته باشید، این باGetMessages()عملکرد). این تابع تنها یک پارامتر دارد که شماره فهرست پیام است. به عنوان مثال، کد زیر فقط اولین پیام را بازیابی می کند:
print(arcpy.GetMessage(0))
نتیجه این است
زمان شروع: 19-19 مارس 6:22:39 بعد از ظهر
توجه داشته باشید:این شاخص مانند بسیاری از جنبه های دیگر پایتون از صفر (0) شروع می شود.
تعداد پیام های آخرین اجرای ابزار را می توان با استفاده ازarcpy.GetMessageCount()عملکرد. این تابع به ویژه برای بازیابی آخرین پیام مفید است. از آنجایی که معمولاً از قبل نمیدانید چه تعداد پیام ممکن است از اجرای یک ابزار حاصل شده باشد، میتوانید از تعداد پیامها برای بازیابی آخرین پیام استفاده کنید. کد برای به دست آوردن تعداد پیام است
arcpy.GetMessageCount()
فقط برای بازیابی آخرین پیام، از موارد زیر استفاده کنید:
count = arcpy.GetMessageCount()
print(arcpy.GetMessage(count-1))
نتیجه به شرح زیر خواهد بود:
موفقیت آمیز در 19-19 مارس 6:24:34 بعد از ظهر (زمان سپری شده: 0.11 ثانیه)
توجه داشته باشید:پیامهای ابزار geoprocessing یک لیست پایتون نیستند، بلکه از یک رشته تشکیل شدهاند که پیامهای جداگانه با یک کاراکتر خط جدید (\n) از هم جدا شدهاند. بنابراین، شما نمی توانید از نمایه سازی معکوس استفاده کنید—یعنی،arcpy.GetMessage(-1))آخرین پیام را بر نمی گرداند.
علاوه بر دریافت تعداد پیام ها، می توانید حداکثر شدت پیام ها را نیز با استفاده از پرس و جو کنیدarcpy.GetMaxSeverity()عملکرد به شرح زیر است:
print(arcpy.GetMaxSeverity())
در مثال قبلی اجرای ابزار Clip، اجرای کد مقدار 0 را برمی گرداند زیرا فقط پیام های اطلاعاتی وجود دارد.
اگر چهGetMessage()،GetMessageCount()، وGetMaxSeverity()توابع مفید هستند، در عملGetMessages()تابع بیشترین استفاده را دارد. هنگامی که یک ابزار از کار می افتد، پیام ها بسیار مهم هستندGetMessages()تابع معمولا در ترکیب با تکنیک های رسیدگی به خطا استفاده می شود.
توابع مورد بحث تا کنون به شما امکان می دهد پیام ها را از آخرین ابزاری که اجرا شده است بازیابی کنید زیرا پیام ها توسط ArcPy نگهداری می شوند. با این حال، به محض اجرای ابزار دیگری، دیگر نمیتوانید پیامها را از ابزارهایی که قبلا اجرا شدهاند بازیابی کنید. برای بازیابی پیام ها حتی پس از اجرای چندین ابزار، می توانید استفاده کنیدنتیجهاشیاء برای بازیابی و تفسیر پیام های ابزار ژئوپردازش. به جای اجرای ابزاری برای ایجاد فایل های خروجی جدید ذخیره شده در دیسک، نتیجه عملیات geoprocessing به عنوان یک شی برگردانده می شود. مثلا:
واردات کمان
arcpy.env.workspace = “C:/Data”
myresult = arcpy.GetCount_management(“streams.shp”)
درنتیجهکلاس دارای چندین ویژگی و روش است. درتعداد پیام هاویژگی تعداد پیام ها وgetMessage()پیام خاصی را برمی گرداند. به عنوان مثال، اجرای کد زیر، تعداد پیامها و به دنبال آن آخرین پیام را بازیابی میکند:
واردات کمان
arcpy.env.workspace = “C:/Data”
result = arcpy.GetCount_management(“streams.shp”)
count = result.messageCount
print(result.getMessage(count-1))
توجه داشته باشید که نحو شبیه به استفاده از توابع پیام عمومی است، اما یکسان نیست. هنگام استفاده ازarcpy.GetMessage()، شما در حال فراخوانی یک تابع هستید، در حالی که استفاده می کنید<object>.getMessage()، شما در حال بازیابی ویژگی های یک شی هستید. درنتیجهکلاس دارای چندین مزیت نسبت به فراخوانی توابع پیام است که مهمترین آنها این است که می توان پیام ها را پس از اجرای چندین ابزار حفظ کرد. درنتیجهکلاس همچنین دارای چندین ویژگی و روش اضافی است، از جمله گزینه هایی برای شمارش تعداد خروجی ها و توانایی کار با خروجی های خاص از یک ابزار ژئوپردازش.
5.13کار با مجوزها
اجرای ابزارهای geoprocessing به مجوز ArcGIS Pro نیاز دارد. این البته برای اجرای یک ابزار از داخل ArcGIS Pro صادق است، اما برای اجرای یک اسکریپت پایتون مستقل که از این ابزارها استفاده می کند نیز صدق می کند. اگر مجوز در دسترس نباشد، یک ابزار از کار می افتد و یک پیام خطا برمی گرداند. سطوح بالاتر مجوز دسترسی به تعداد بیشتری از ابزارها را فراهم می کند. به عنوان مثال، اگر مجوز پایه دارید و سعی می کنید ابزاری را اجرا کنید که به مجوز پیشرفته نیاز دارد، ابزار اجرا نمی شود.
ابزاری از یک پسوند ArcGIS Pro، مانند 3D Analyst یا Spatial Analyst، به مجوز اضافی برای آن پسوند نیاز دارد. بنابراین، اگر مجوز Spatial Analyst نداشته باشید و سعی کنید ابزاری را که بخشی از جعبه ابزار Spatial Analyst است اجرا کنید، ابزار اجرا نمی شود. به عنوان مثال، در کد زیر، تابع Slope از ماژول Spatial Analyst با یک مدل ارتفاعی دیجیتال رستری (DEM) به عنوان ورودی فراخوانی می شود:
واردات کمان
arcpy.sa.Slope(“C:/Data/dem”، “DEGREE”)
اگر مجوز ArcGIS Spatial Analyst در دسترس نباشد، خطای زیر ایجاد می شود:
ERROR 000824: ابزار مجوز ندارد.
اجرا نشد (شیب).
قبل از شروع بحث در مورد نحوه مدیریت مجوزها با استفاده از پایتون، مهم است که نحوه مجوز ArcGIS Pro را در نظر بگیرید. سه نوع مجوز وجود دارد:
- مجوز کاربر به نام
- مجوز یکبار مصرف
- مجوز استفاده همزمان
لایسنس Named User نوع مجوز پیش فرض برای ArcGIS Pro است. انواع محصول و برنامه های افزودنی توسط یک سرپرست به اعضای یک سازمان اختصاص داده می شود. می توانید مجوزها را از داخل ArcGIS Pro در قسمت Project > Licensing مشاهده کنید. شکل یک مثال معمولی را نشان می دهد، اما انواع محصول و برنامه های افزودنی بین کاربران متفاوت است. مجوز با الزام کاربر برای ورود به سیستم برای استفاده از ArcGIS Pro کنترل می شود.
مجوز Single Use تنها به یک کاربر اجازه می دهد از ArcGIS Pro در یک کامپیوتر استفاده کند. پس از پیکربندی این مجوز، کاربر نیازی به ورود به سیستم ندارد. این نوع مجوز برای ArcGIS Pro معمول نیست.
مجوز استفاده همزمان به چندین کاربر امکان می دهد دسترسی به ArcGIS Pro را از هر رایانه ای در شبکه به اشتراک بگذارند. این به یک مدیر اجازه می دهد تا توزیع مجموعه ای از مجوزهای مشترک را مدیریت کند. پس از پیکربندی این مجوز، کاربر نیازی به ورود به سیستم ندارد.
هنگام استفاده از مجوز نام کاربری، که رایج ترین نوع مجوز برای ArcGIS Pro است، سطح محصول و پسوند توسط حساب کاربری تنظیم می شود و این موارد به طور خودکار از ArcPy در دسترس هستند. بنابراین، توابع خاص، مانندarcpy.CheckOutExtension()وarcpy .CheckInExtension()، هیچ تاثیری ندارند و فقط باید در هنگام استفاده از مجوز همزمان استفاده شوند.
هر ابزار geoprocessing که در پایتون اجرا میشود، بررسی میکند که مجوز مناسب را داشته باشد. برای جلوگیری از شکست یک اسکریپت به دلیل یک ابزار بدون مجوز، می توانید مجوزها را در ابتدای اسکریپت بررسی کنید. مجوزهای شش محصول زیر را می توان بررسی کرد:
- نمای قوسی(پایه ای)
- Arceditor(استاندارد)
- arcinfo(پیشرفته)
- موتور(زمان اجرای موتور)
- enginegeodb(به روز رسانی پایگاه ژئودیتابیس موتور)
- سرور آرک(سرور)
سطح محصول را می توان با وارد کردن ماژول محصول مناسب قبل از وارد کردن ArcPy تنظیم کرد. به عنوان مثال، برای تنظیم سطح مجوز محصول دسکتاپ روی ArcGIS Desktop Basic (نمای قوسی، یک اسکریپت با کد زیر شروع می شود:
واردات قوس
واردات کمان
توجه داشته باشید:کدهای محصول ممکن است کمی گیج کننده باشد. به عنوان مثال، کد محصول ArcGIS Desktop Basic نامیده می شودنمای قوسی. قدمت برخی از این کدهای محصول به نسخه های قدیمی نرم افزار Esri مانند ArcView و ArcInfo می رسد که دیگر مورد استفاده قرار نمی گیرند.
پس از وارد کردن ArcPy نمی توان سطح محصول دسکتاپ را تنظیم کرد. اگر مجوزی به صراحت تنظیم نشده باشد، مجوز بر اساس بالاترین سطح مجوز موجود در اولین باری که ArcPy وارد می شود، مقداردهی اولیه می شود. بنابراین به طور کلی نیازی به تنظیم سطح محصول در پایتون نیست و اسکریپت های زیادی که شامل آن می شود را نخواهید دید.
توجه داشته باشید:تنظیم محصول و برنامه های افزودنی فقط در اسکریپت های مستقل ضروری است. اگر ابزارهایی را از داخل پنجره پایتون در ArcGIS Pro اجرا می کنید یا از ابزارهای اسکریپت پایتون در ArcGIS Pro استفاده می کنید، مجوز از قبل از داخل برنامه تنظیم شده است.
درarcpy.CheckProduct()تابع می تواند بررسی کند که آیا مجوز درخواستی موجود است یا خیر. برای مثال، کد زیر تعیین می کند که آیا ArcGIS Desktop Advanced (arcinfo) مجوز موجود است:
if arcpy.CheckProduct(“arcinfo”) == “در دسترس”:
تنها پارامتر برایCheckProduct()یک رشته است که باید یکی از شش کد محصول لیست شده قبلی باشد. به حروف بزرگ و کوچک حساس نیست، بنابراین”arcinfo”مثل این هست که”ArcInfo”. نتیجه ازCheckProduct()تابع یک رشته است که می تواند یکی از پنج مقدار ممکن را داشته باشد:
- AlreadyInitalized(مجوز قبلاً در فیلمنامه تنظیم شده است)
- در دسترس(مجوز درخواستی برای تنظیم موجود است)
- غیر قابل دسترسی(مجوز درخواستی برای تنظیم در دسترس نیست)
- بدون مجوز(مجوز درخواستی معتبر نیست)
- ناموفق(شکست سیستم در طول درخواست رخ داده است)
درarcpy.ProductInfo()تابع به شرح زیر گزارش می دهد که مجوز محصول فعلی چیست:
واردات کمان
print(arcpy.ProductInfo())
دراطلاعات محصول()تابع یک مقدار رشته ای را برمی گرداند که دارای مقدار استاولیه نشده استاگر هنوز مجوزی تنظیم نشده باشد، یا مجوز محصول فعلی را برمی گرداند (به عنوان مثال،ArcInfo).
همانطور که قبلاً ذکر شد، ابزارهای یک برنامه افزودنی ArcGIS Pro، مانند 3D Analyst یا Spatial Analyst، به مجوز اضافی برای آن پسوند نیاز دارند. درarcpy.CheckExtension()از تابع برای بررسی وجود مجوز استفاده می شود. مثلا:
واردات کمان
arcpy.CheckExtension (“فضایی”)
نام مجوز برای برنامه های افزودنی نیز به حروف بزرگ و کوچک حساس نیست. علاوه بر این، نام مجوزها از هیچ فاصله ای استفاده نمی کند. به عنوان مثال، نام مجوز برای پسوند Data Reviewer استDataReviewer، که همچنین می تواند به صورت نوشته شودبررسی کننده داده.
درCheckExtension()تابع یک رشته را برمی گرداند و می تواند یکی از چهار مقدار ممکن را داشته باشد:
- در دسترس(مجوز درخواستی برای تنظیم موجود است)
- غیر قابل دسترسی(مجوز درخواستی برای تنظیم در دسترس نیست)
- بدون مجوز(مجوز درخواستی معتبر نیست)
- ناموفق(شکست سیستم در هنگام درخواست مجوز رخ داده است)
توجه داشته باشید:هنگامی که ArcGIS Pro از مجوز از طریق سازمان استفاده می کند (یعنی مجوز کاربر نامگذاری شده)، پسوندهای موجود توسط حساب کاربری تنظیم می شوند و با استفاده از ArcPy نمی توان آن را تغییر داد. بنابراین، عملکردهای زیر برای بررسی و بررسی برنامه های افزودنی هیچ تأثیری ندارند. توابع مورد بحث در ادامه فقط برای مجوزهای استفاده همزمان مرتبط هستند.
هنگامی که در دسترس بودن مجوز مشخص شد،CheckOutExtension()تابع می تواند مجوز را دریافت کند. پس از اجرای یک اسکریپت ابزارهایی که به مجوز نیاز دارند،CheckInExtension()تابع می تواند مجوز را برگرداند. به عنوان مثال، کد زیر ابتدا در دسترس بودن مجوز برای 3D Analyst را بررسی می کند و در صورت در دسترس بودن مجوز، مجوز دریافت می شود و پس از اتمام کار ابزار برگردانده می شود:
واردات کمان
arcpy.env.workspace = “C:/Data”
if arcpy.CheckExtension(“3D”) == “در دسترس”:
arcpy.CheckOutExtension (“3D”)
arcpy.Slope_3d(“dem”، “slope”، “DEGREES”)
arcpy.CheckInExtension (“3D”)
دیگر:
چاپ (“مجوز 3D Analyst در دسترس نیست.”)
درCheckOutExtension()تابع یک رشته را برمی گرداند و سه مقدار بازگشتی ممکن وجود دارد: (1)اولیه نشده است، (2)غیر قابل دسترسیو (3)بررسی شد. به طور معمول، شما ازCheckExtension()تابع برای تعیین در دسترس بودن مجوز قبل از استفاده ازCheckOutExtension()عملکرد. درCheckInExtension()تابع یک رشته را برمی گرداند و سه مقدار بازگشتی ممکن وجود دارد: (1)اولیه نشده است، (2)ناموفقو (3)ورود به سیستم.
پرکاربردترین نوع مجوز برای ArcGIS Pro مجوز نام کاربری است. برای این نوع مجوز، در اسکریپت های خود مهم است که در دسترس بودن مجوز برای هر گونه برنامه افزودنی لازم را با استفاده ازCheckExtension()عملکرد. با این حال، اگر مجوزی در دسترس نباشد، امکان بررسی یک برنامه افزودنی با استفاده از ArcPy وجود ندارد و تنها با مدیریت حساب کاربری میتوان به آن پرداخت.
5.14دسترسی به کمک ArcGIS Pro
صفحات راهنمای ArcGIS Pro حاوی اطلاعات زیادی در مورد استفاده از ArcPy و استفاده از Python برای اجرای ابزارهای geoprocessing است. صفحه اصلی پشتیبانی ArcGIS Pro استhttps://pro.arcgis.com/en/pro-app/help. تب Python مرجع ArcGIS Pro Python را نشان می دهد که شامل اسناد رسمی تمام عملکردهای ArcPy است. تمام توابع و کلاسهای ArcPy فهرست شده و با جزئیات شرح داده شدهاند و کد نمونه ارائه شده است. همچنین بخشهای جداگانهای در ماژولهای مختلف ArcPy مانند دسترسی به داده، تحلیلگر تصویر، تحلیل فضایی و ماژولهای نقشهبرداری وجود دارد. فصل های 6، 8 و 9 ماژول دسترسی به داده ها را پوشش می دهد (arcpy.da) فصل 10 ماژول تحلیلگر تصویر (arcpy.ia) و ماژول تحلیل فضایی (arcpy.sa) و فصل 11 ماژول نقشه برداری را پوشش می دهد (arcpy.mp).
تمام صفحات راهنما حاوی کد نمونه هستند. به عنوان مثال، صفحه راهنما برایوجود دارد()تابع (برگه پایتون > توابع ArcPy > توابع داده عمومی) شامل یک توضیح کلی از تابع، برخی بحث های اضافی در مورد استفاده از تابع، و نحو تابع با توضیح پارامترهای تابع است.
کد نمونه آشنایی با اسکریپت نویسی پایتون را فرض می کند، اما معمولاً نمونه های خوبی از نحوه استفاده از یک تابع (یا کلاس) ارائه می دهد. میتوانید تمام یا قسمتهایی از کد را کپی کنید و آن را در ویرایشگر پایتون جایگذاری کنید تا شروعی برای اسکریپت خود داشته باشید.
ابزارهای geoprocessing فردی همچنین شامل صفحات راهنما با توضیح نحوه عملکرد ابزار، و همچنین نحو ابزار و نمونه کد پایتون است. به یاد بیاورید که تمام ابزارهای ژئوپردازش در ArcGIS Pro از توابع ArcPy هستند. بنابراین، اگر به دنبال توضیحی در مورد نحوه استفاده از ابزار پردازش جغرافیایی در پایتون هستید، باید به مستندات این ابزار نگاه کنید زیرا آنها در زیر توابع ArcPy فهرست نشدهاند. به عبارت دیگر، وقتی به تب پایتون می روید و روی توابع ArcPy کلیک می کنید، آنچه می بینید همه توابع غیر ابزار هستند. مستندات توابع ابزار را می توان در زیر تب Tool Reference با کلیک کردن بر روی Tools یافت. ابزارها در اینجا بر اساس جعبه ابزار و مجموعه ابزار سازماندهی شده اند، درست همانطور که در بخش Geoprocessing در ArcGIS Pro هستند.
صفحه راهنما برای هر ابزار از چند طریق قابل دسترسی است. ابتدا از صفحه پشتیبانی اصلی،https://pro.arcgis.com/en/pro-app/help، می توانید با استفاده از نام ابزار جستجو کنید. جستجوی یک عبارت فهرستی از تمام صفحات راهنمای ابزارها را با آن عبارت در نام یا توضیحات به نمایش می گذارد. اگر در مورد نام دقیق ابزار مطمئن نیستید، این مفید است. برای مثال، جستجوی عبارت «پیوستن»، صفحات کمکی برای ابزارهای Spatial Join، Join Features، و Join Field و غیره را نشان می دهد. دوم، از صفحه اصلی پشتیبانی، میتوانید به تب Tool Reference بروید و ابزار خاص را مرور کنید، اما این رویکرد مستلزم آن است که جعبه ابزار و مجموعه ابزاری که در آن قرار دارد را بشناسید. سوم، از داخل ArcGIS Pro، وقتی یک جعبه محاورهای ابزار باز دارید، میتوانید روی نماد راهنما آبی روشن (که از نماد ? استفاده میکند) در نزدیکی گوشه سمت راست بالا کلیک کنید، که صفحه راهنمای آن ابزار را با استفاده از پیشفرض شما باز میکند. برنامه مرورگر
همه صفحات مرجع ابزار دارای ساختار یکسانی هستند. برای مثال، صفحه راهنمای ابزار Clip در جعبه ابزار Analysis در مجموعه ابزار Extract در شکل نشان داده شده است.
پس از توضیح ابزار، نحو Python با توضیح دقیق هر پارامتر ارائه شده است. نمونههای کد معمولاً کوتاه هستند، اما کاربرد خاص ابزار را نشان میدهند.
نکاتی که باید به خاطر بسپارید
- بسته ArcPy دسترسی از پایتون به عملکرد geoprocessing در ArcGIS Pro را فراهم می کند. ArcPy در ماژول ها، توابع و کلاس ها سازماندهی شده است.
- تقریباً تمام ابزارهای ژئوپردازش در ArcGIS Pro به عنوان توابع ArcPy ارائه می شوند. هنگامی که ArcPy به یک اسکریپت پایتون وارد شد، می توانید ابزارهای پردازش جغرافیایی موجود در جعبه ابزار استاندارد نصب شده با ArcGIS Pro را اجرا کنید. نحو برای اجرای یک ابزار است<toolname_toolboxalias>(<parameters>). اسناد مربوط به هر ابزار جزئیاتی را در مورد پارامترهای مورد نیاز و اختیاری مورد نیاز برای اجرای یک ابزار ارائه می دهد. توابع غیرابزاری اضافی در ArcPy برای پشتیبانی از پردازش جغرافیایی و سایر وظایف در دسترس هستند.
- کلاس ها در ArcPy برای ایجاد اشیا استفاده می شوند. کلاس های رایج استفاده می شودenvکلاس ومرجع فضاییکلاس سینتکس برای تنظیم ویژگی یک کلاس است<classname>.<property> = <value>.
- پیامهایی که از اجرای یک ابزار حاصل میشوند را میتوان با استفاده از توابع پیام بازیابی کردGetMessages()،GetMessage()، وGetMaxSeverity(). پیام ها می توانند شامل اطلاعات، اخطار یا پیام های خطا باشند.
- چندین عملکرد برای بررسی مجوزهای موجود برای محصولات و برنامههای افزودنی، بررسی مجوزها و بررسی مجدد مجوزها در دسترس است.
- صفحات راهنما ArcGIS Pro شامل نمونههای بسیاری از کدهای پایتون، از جمله صفحات راهنما برای ابزارهای ژئوپردازش جداگانه است.
شرایط کلیدی
- کلاس
- محیط
- کد کارخانه (یک سیستم مختصات)
- عملکرد
- سخت کد شده
- نمونه، مثال
- نمونه شد
- روش
- فضای نام
- عملکرد غیر ابزاری
- هدف – شی
- بسته بندی
- ویژگی
- نام مستعار جعبه ابزار
- برچسب ابزار
- نام ابزار
- شناسه شناخته شده (WKID)
- متن معروف (WKT)
- فضای کار
سوالات را مرور کنید
- رابطه بین ابزارهای geoprocessing در ArcGIS Pro و توابع در ArcPy را توضیح دهید.
- تفاوت بین پارامترهای مورد نیاز و اختیاری ابزارهای geoprocessing دقیقاً چیست و این چگونه روی نوشتن کد برای استفاده از این ابزارها در یک اسکریپت تأثیر می گذارد؟
- مثالی از استفاده از متغیرها برای پارامترها به جای مقادیر کدگذاری سخت ارائه دهید تا کد شما همه کاره تر شود.
- برخی از کاربردهای آن را توضیح دهیدنتیجههدف – شی.
- چرا از کلاس ها به عنوان پارامترهای ورودی ابزارهای ژئوپردازش استفاده می شود؟
- برخی از رویکردهایی را که می توان برای ارجاع به سیستم مختصات یک مجموعه داده در یک اسکریپت استفاده کرد، توضیح دهید.
- برخی از محیط های معمولی که در یک اسکریپت تنظیم شده اند کدامند؟
- کدام توابع ArcPy برای دریافت پیام های معنی دار از اجرای ابزارهای پردازش جغرافیایی در یک اسکریپت استفاده می شود؟ هر تابع برای چه چیزی استفاده می شود؟
- توضیح دهید که ArcGIS Pro چگونه مجوز می گیرد و چگونه این امر بر مدیریت مجوز هنگام نوشتن اسکریپت تأثیر می گذارد.
بدون دیدگاه