برنامه نویسی نقشه با پایتون در GIS-فصل 11
11.1معرفی
این فصل ماژول نقشه برداری ArcPy را شرح می دهد که به آن نیز گفته می شودarcpy.mp. هدف اصلی این ماژول دستکاری محتویات پروژه های موجود (aprx.) و فایل های لایه (lyrx.) است. این شامل کار با نقشه ها، لایه ها و جداول است. استفاده از نمادشناسی؛ و مدیریت چیدمان ها
توجه داشته باشید:حتی اگر ماژول به عنوان ماژول “نقشه برداری” نامیده می شود، این نام می تواند گیج کننده باشد. ماژول موجود در ArcPy در ArcGIS Desktop 10.x فراخوانی شدarcpy.mapping، اما تغییرات در عملکرد ArcGIS Pro قابل توجه بود و ماژول باarcpy.mpمدول. با این حال، به طور کلی تر، هدف ماژول یکسان است – یعنی خودکار کردن وظایف نقشه برداری. در نتیجه، حتی اگر نام واقعی آن باشد، هنوز به عنوان ماژول “نقشه برداری” نامیده می شودarcpy.mp.
ماژول نگاشت شامل توابع و کلاس های زیادی است. برای استفاده از ماژول نگاشت با استفاده از پایتون، آشنایی خوبی با وظایف مربوط به نقشه برداری در ArcGIS Pro لازم است، زیرا بسیاری از توابع و کلاس ها جریان های کاری معمولی را در برنامه ArcGIS Pro تکرار می کنند.
11.2کار با ماژول نقشه برداری ArcPy
ماژول نقشه برداری ArcPy گردش کار ArcGIS Pro را برای سرعت بخشیدن به کارهای تکراری خودکار می کند. برخی از نمونه های معمول استفاده از ماژول نقشه برداری ArcPy به شرح زیر است:
- پیدا کردن یک لایه با یک منبع داده خاص و جایگزینی آن با منبع داده دیگری
- اصلاح ویژگی های نمایش یک لایه خاص در چندین نقشه
- ایجاد گزارش هایی که محتویات پروژه ها را توصیف می کند، از جمله نقشه ها، لایه ها، جداول و طرح بندی ها
- جستجو و جایگزینی یک رشته متن در چند طرح در یک پروژه
محیط بسیار بصری ArcGIS Pro برنامه کاربردی توصیه شده برای ایجاد پروژه های جدید و برای ایجاد نقشه ها، لایه ها و طرح بندی ها در یک پروژه است. با این حال، هنگامی که آنها ایجاد می شوند، ماژول نقشه برداری ArcPy می تواند وظایف نقشه برداری خاص، به ویژه وظایف تکراری را در بسیاری از عناصر، خودکار کند. ماژول نقشه برداری ArcPy به شما امکان می دهد بسیاری از کارهایی را که معمولاً با استفاده از ArcGIS Pro انجام می دهید، خودکار کنید.
کار با ماژول نگاشت ArcPy از گردش کار استفاده شده در جلسه ArcGIS Pro پیروی می کند. به عنوان مثال، یک گردش کار معمولی شامل باز کردن یک پروژه، اصلاح ویژگی های یک نقشه، افزودن یک لایه، اصلاح ویژگی های آن لایه، تغییر چندین عنصر از یک طرح، و سپس صادرات آن طرح به یک فایل PDF است. اسکریپت هایی که از توابع و کلاس های ماژول نقشه برداری ArcPy استفاده می کنند، این مراحل را خودکار می کنند.
11.3ارجاع پروژه ها
یک پروژه در ArcGIS Pro به عنوان یک فایل .aprx بر روی دیسک ذخیره می شود – به عنوان مثال، C:\Mapping\Study.aprx. ماژول نگاشت ArcPy به شما اجازه می دهد تا فایل های .aprx. علاوه بر فایل های لایه (lyrx.) که دارای ویژگی هایی برای لایه های جداگانه هستند، مرجع و دستکاری کنید.
دو راه برای شروع کار با یک پروژه با استفاده از ماژول نقشه برداری ArcPy وجود دارد: (1) به یک فایل .aprx موجود که روی دیسک ذخیره شده است ارجاع دهید، یا (2) از پروژه از جلسه ArcGIS Pro فعلی استفاده کنید. درarcpy.mp.ArcGISProject()تابع هر دو را انجام می دهد. نحو این تابع است
arcpy.mp.ArcGISProject(aprx_path)
درaprx_pathپارامتر رشته ای است که مسیر کامل یک فایل aprx. روی دیسک را نشان می دهد. کد زیر به یک پروژه ArcGIS Pro اشاره می کند:
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Study.aprx”)
توجه داشته باشید:نام متغیر انتخاب شده در اینجا با پسوند فایل یکی است، اما این سبک نامگذاری الزامی نیست. شما می توانید آن را هر نام دیگری بگذارید (به عنوان مثال،پروژهیاپروژه من)، ولیaprxکوتاه و واضح است و بنابراین شما آن را در بسیاری از اسکریپت های نمونه از جمله در این کتاب خواهید دید.
این رویکرد همه کاره است زیرا هم در برنامه ArcGIS Pro و هم در یک اسکریپت مستقل کار می کند. در نتیجه، این نحو پرکاربردترین و توصیهشدهترین روش است.
برای استفاده از پروژه فعلی در ArcGIS Pro، از کلمه کلیدی CURRENT (با تمام حروف بزرگ) استفاده می شود:
aprx = arcpy.mp.ArcGISProject(“CURRENT”)
برای استفاده از کلمه کلیدی CURRENT، ArcGIS Pro باید در حال اجرا باشد و این روش فقط از داخل برنامه ArcGIS Pro قابل استفاده است. این شامل اجرای کد در پنجره پایتون در ArcGIS Pro یا اجرای ابزارهای اسکریپت است. کلمه کلیدی CURRENT برای اسکریپت های مستقل کار نمی کند زیرا برنامه ArcGIS Pro در زمان اجرا شناسایی نمی شود.
هنگامی که یک فایل .aprx موجود استفاده می شود، اسکریپت می تواند مستقل از ArcGIS Pro اجرا شود. استفاده از مسیر سیستم برای باز کردن یک پروژه ArcGIS Pro توصیه میشود، زیرا کد شما را متنوعتر میکند و کنترل بیشتری بر نحوه اجرای اسکریپت میدهد. با این حال، استفاده از کلمه کلیدی CURRENT می تواند برای آزمایش سریع کد در پنجره پایتون مفید باشد. هر زمان که کلمه کلیدی CURRENT را در یک اسکریپت مثال مشاهده کردید، معمولاً می توانید آن را با مسیر کامل یک فایل aprx. جایگزین کنید.
درArcGISProject()تابع an را برمی گرداندپروژه ArcGISهدف – شی. به عبارت دیگر،پروژه ArcGISهم تابع و هم کلاسی از the استarcpy.mpمدول. درپروژه ArcGISکلاس دسترسی به بسیاری از ویژگی ها و روش های مختلف پروژه ها را فراهم می کند. کلاس همچنین دسترسی به اشیاء دیگر در یک پروژه را فراهم می کند. به عنوان مثال، برای به دست آوردن نقشه ها، لایه ها یا چیدمان ها، ابتدا باید به an ارجاع دهیدپروژه ArcGISهدف – شی. در نتیجه،پروژه ArcGISشی معمولاً اولین مرجع شی است که در یک اسکریپت نگاشت ایجاد می شود.
از وقتی کهپروژه ArcGISشی ایجاد می شود، ویژگی های پروژه را می توان خواند و اصلاح کرد. قبل از بررسی نحوه انجام این تغییرات، ابتدا نحوه ذخیره آنها را در نظر بگیرید. اگر با پروژه ای در ArcGIS Pro کار می کنید و تغییری مانند اضافه کردن یک لایه ایجاد می کنید، دو راه برای ذخیره فایل .aprx وجود دارد: Save و Save As. وقتی از Save استفاده می شود، تغییرات در همان فایل aprx. ذخیره می شود. وقتی از Save As استفاده می شود، تغییرات در فایل aprx. جدیدی که شما مشخص کرده اید ذخیره می شود. در یک محیط اسکریپت نویسی،پروژه ArcGISشی ازصرفه جویی()وsaveACopy()مواد و روش ها. درsaveACopy()روش همان چیزی است که گزینه Save As در برنامه ArcGIS Pro انجام می دهد.
زمانی که یکپروژه ArcGISشی در یک اسکریپت ارجاع داده می شود، فایل .aprx قفل شده است. این قفل از ایجاد تغییرات در فایل توسط سایر برنامه ها جلوگیری می کند. بنابراین تمرین خوبی است که با استفاده از پایتون، ارجاع به پروژه را زمانی که دیگر در یک اسکریپت مورد نیاز نیست حذف کنید.دلبیانیه. این عبارت فایل .aprx واقعی را حذف نمی کند، بلکه فقط ارجاع به شی موجود در حافظه را حذف می کند. بنابراین یک اسکریپت نگاشت اغلب دارای ساختاری شبیه به زیر است:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Study.aprx”)
<کدی که ویژگی های پروژه را تغییر می دهد>
aprx.save()
del aprx
هنگامی که اجرای یک اسکریپت به پایان می رسد، پایتون به طور خودکار ارجاعات به اشیاء را حذف می کند، بنابرایندلبیانیه مورد نیاز نیست اما همچنان احتمال قفل های ناخواسته را کاهش می دهد.
توجه داشته باشید:اکثر کدهای مثال در این فصل به جای استفاده از کلمه کلیدی CURRENT به یک فایل aprx. روی دیسک ارجاع می دهند. با این وجود، بیشتر نمونه ها را می توان در پنجره پایتون با استفاده از کلمه کلیدی CURRENT اجرا کرد.
برای ارجاع به یک فایل .aprx روی دیسک، باید مسیر کامل را ارائه دهید – به عنوان مثال، C:\Mapping \Study.aprx. بر خلاف کار با مجموعه داده ها و سایر فایل ها، تنظیم یک فضای کاری برای فایل های aprx. کافی نیست. کد زیر را در نظر بگیرید:
واردات کمان
arcpy.env.workspace = “C:/Mapping”
aprx = arcpy.mp.ArcGISProject(“Study.aprx”)
تنظیم فضای کاری هیچ تاثیری ندارد و خطایی ایجاد می کند مگر اینکه اسکریپت در همان پوشه ای باشد که فایل aprx. به عبارت دیگر مرجعی مانندarcpy.mp.ArcGISProject(“مطالعه .aprx”)فقط در صورتی کار می کند که اسکریپت و فایل aprx. در یک پوشه باشند. در غیر این صورت باید مسیر کامل را ارائه دهید. با این حال، بسیاری از اسکریپت ها به دلایل دیگری از یک فضای کاری استفاده می کنند. اگر فایل .aprx در همان فضای کاری قرار دارد، می توانید از کد زیر برای ارجاع به مسیر کامل استفاده کنید:
واردات کمان
واردات سیستم عامل
ws = “C:/Mapping”
arcpy.env.workspace = ws
aprxpath = os.path.join(ws، “Study.aprx”)
aprx = arcpy.mp.ArcGISProject(aprxpath)
توجه داشته باشید:نمونههای این فصل معمولاً مسیر کامل را کد سختی میکنند.
11.4دسترسی به خواص و روش های پروژه
خواص یکپروژه ArcGISشی شامل ویژگی های توصیفی اساسی مانندفعال نقشه(نقشه مرتبط با نمای متمرکز)،dateSaved(آخرین تاریخ ذخیره پروژه)،documentVersion(نسخه ای از سند که آخرین بار ذخیره شده است)، ومسیر فایل(مسیر کامل پروژه و نام فایل). این ویژگی ها همه فقط خواندنی هستند. چندین ویژگی دیگر خواندن و نوشتن هستند، از جملهdefaultGeodatabase(محل پایگاه داده جغرافیایی پیش فرض پروژه)،جعبه ابزار پیش فرض(جعبه ابزار پیش فرض پروژه)، وhomeFolder(محل پوشه خانه پروژه).
به عنوان مثال، کد زیر برخی از ویژگی های فقط خواندنی را چاپ می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
چاپ (aprx.documentVersion)
چاپ (aprx.filePath)
del aprx
دردلبیانیه تضمین می کند که قفل پروژه حذف شده است.
پرینت از اسکریپت به شرح زیر است:
2.5.0
C:/Mapping/Demo.aprx
برای تغییر یکی از ویژگی های خواندن و نوشتن، باید به ویژگی یک مقدار جدید اختصاص داده شود و پروژه باید به صورت زیر ذخیره شود:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
aprx.defaultGeodatabase = “C:/Mapping/Data.gdb”
aprx.save()
del aprx
اگرچه خط سوم کد مانند یک دستور انتساب ساده به نظر می رسد، کد مسیر کامل پایگاه داده جغرافیایی و نام فایل را تأیید می کند. اگر پایگاه داده جغرافیایی وجود نداشته باشد، دستور انتساب منجر به خطا می شود.
همانطور که این نمونه ها را مرور می کنید، به یاد داشته باشید که می توان از آنها برای خودکارسازی کارهای پیچیده تر، مانند ایجاد تغییرات در چندین پروژه به جای یک پروژه، استفاده کرد.
علاوه بر خواص،پروژه ArcGISشی چندین روش از جملهصرفه جویی()وsaveACopy()روش هایی که قبلا ذکر شد و همچنین روش های کار با محتویات پروژه ها. این روش ها در اینجا با جزئیات مورد بررسی قرار می گیرند.
درimportDocument()این روش امکان وارد کردن اسناد نقشه (فایلهای mxd.)، اسناد globe (فایلهای .3dd) و اسناد صحنه (.sxd) را در یک پروژه ممکن میسازد. ArcGIS Desktop 10.x از برنامه های کاربردی جداگانه برای کار با این اسناد استفاده می کرد – به ترتیب ArcMap، ArcGlobe و ArcScene. عملکرد این برنامه ها در ArcGIS Pro یکپارچه شده است. همچنین میتوانید محتوای فایلهای نقشه (mapx.)، فایلهای طرحبندی (pagx.)، و فایلهای گزارش (rptx.) را وارد کنید. سینتکس این روش به صورت زیر است:
ArcGISProject.importDocument(document_path, {include_layout},
{استفاده مجدد از_نقشه_های_موجود})
درسند_مسیرمتغیر از یک رشته تشکیل شده است که مسیر کامل و نام سند را نشان می دهد. شما می توانید تنها یک سند را در یک زمان وارد کنید، بنابراین برای وارد کردن چندین سند، باید روش را تکرار کنید. یک سند نقشه همیشه شامل یک طرح است، در حالی که اسناد کره و اسناد صحنه اینگونه نیستند. اختیاریinclude_layoutپارامتر یک Boolean است که نشان می دهد که آیا می خواهید طرح را وارد کنید. پیش فرض استدرست است، واقعی. اگر این پارامتر روینادرست، فقط فریم های داده سند نقشه به عنوان نقشه وارد می شوند، نه طرح. اختیاریاستفاده مجدد از نقشه های موجودپارامتر یک Boolean برای جلوگیری از تکرار نقشه ها هنگام وارد کردن یک فایل طرح بندی (pagx.) است. مثال زیر نحوه وارد کردن یک سند نقشه را نشان می دهد:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
aprx.importDocument(“C:/Mapping/Austin.mxd”)
aprx.saveACopy(“C:/Mapping/Demo_copy.aprx”)
del aprx
اسناد نقشه از یک یا چند قاب داده و یک طرح تشکیل شده است. فریمهای داده اصلی و طرحبندی به قالبهای نقشه و طرحبندی ArcGIS Pro تبدیل میشوند. وارد کردن یک سند نقشه با استفاده از این روش در پایتون مشابه انجام همان کار در ArcGIS Pro است. در صفحه کاتالوگ در ArcGIS Pro، به یک فایل mxd. بروید، کلیک راست کرده و روی Import و Open کلیک کنید. درarcpy.mpماژول تلاش می کند تا برخی از این گردش های کاری نقشه برداری را در ArcGIS Pro تکرار کند، اما تفاوت هایی وجود دارد. در این مورد،importDocument()روش به شما این امکان را می دهد که طرح را حذف کنید (که با استفاده از Import و Open در ArcGIS Pro امکان پذیر نیست)، در حالی که استفاده از Import و Open در ArcGIS Pro یکی از نقشه ها یا طرح بندی را در یک نمای باز می کند (کهimportDocument()انجام نمیدهد).
هنگام وارد کردن اسناد نقشه، مهم است که بدانید دقیقاً چه چیزی را وارد می کنید. هر فریم داده در فایل mxd. به نقشه ای در فایل aprx. تبدیل می شود. این نقشه شامل تمامی لایه ها و نماد شناسی آنها می باشد. تنها طرح بندی موجود در فایل mxd. تبدیل به یک طرح بندی در فایل aprx. می شود. این چیدمان شامل تمام عناصر چیدمان از جمله نوار مقیاس، افسانه و غیره است. شما هیچ یک از فایل های داده را وارد نمی کنید. لایه ها همچنان به همان منابع داده ارجاع می دهند و هیچ یک از فایل های داده کپی نمی شوند.
درپروژه ArcGISکلاس شامل دو روش برای مدیریت منابع داده خراب است:listBrokenDataSources()وupdateConnectionProperties(). روش های باقی مانده ازپروژه ArcGISclass برای فهرست کردن محتویات یک پروژه استفاده می شود. این روش ها شامل موارد زیر است:
listColorRamps()- لیستی ازColorRampاشیاء
listLayouts()- لیستی ازچیدماناشیاء
listMaps()- لیستی ازنقشهاشیاء
listReports()- لیستی ازگزارشاشیاء
این متدها لیستی از اشیا را برمی گرداند و بنابراین مانند یک تابع لیست در ArcPy کار می کند. آنها توابع نیستarcpy.mp، با این حال، اما روش هایپروژه ArcGISهدف – شی. متدها فهرستی از اشیاء را برمیگردانند و هر نوع شی مربوط به کلاسی استarcpy.mpمدول. بخشهای زیر نحوه استفاده از این روشها و اشیاء حاصل را شرح میدهند.
یکی از محدودیت هایarcpy.mpماژول این است که نمی توان از آن برای نوشتن یک پروژه جدید از ابتدا استفاده کرد و فقط می توانید با پروژه های موجود کار کنید. به طور مشابه، شما نمی توانید بسیاری از عناصر معمولی دیگر از یک پروژه، از جمله نقشه ها، طرح بندی ها و عناصر طرح بندی را ایجاد کنید. یک استثنا این است که هر دوGraphicElementوTextElementاشیاء الف دارندشبیه()روشی برای ایجاد یک کپی از این عناصر در یک طرح. اصل طراحی ازarcpy.mpماژول این است که پروژه ها و محتویات آنها با استفاده از برنامه ArcGIS Pro نوشته شده استarcpy.mpسپس برای خودکارسازی کارهای تکراری، مانند اصلاح ویژگیهای نقشه، افزودن لایهها، اعمال نمادشناسی، و صادرات طرحبندی استفاده میشود.
اگر نیاز به شروع یک پروژه جدید از ابتدا در اسکریپت های خود دارید، راه حل این است که یک پروژه الگوی اولیه را در ArcGIS Pro بنویسید. این پروژه فقط شامل حداقل عناصر خواهد بود – یعنی حداقل یک نقشه و یک طرح، و سپس می توانید با استفاده از محتویات دستکاری کنید.arcpy.mp.
11.5کار با نقشه ها
یک نقشه در ArcGIS Pro مجموعه ای از لایه های داده های جغرافیایی نمادین و داده های جدولی را نشان می دهد. یک پروژه شامل یک یا چند نقشه است و هر نقشه معمولاً شامل یک یا چند لایه و/یا جدول است. نقشهها، لایهها و جداول، اشیاء عالی برای استفاده در فهرستها هستند که میتوانند به خودکارسازی وظایف کمک کنند.
برای تجسم محتویات یک نقشه در ArcGIS Pro، نمای نقشه را باز کنید یا یک قاب نقشه را به طرح بندی اضافه کنید. همان نقشه را می توان در چندین نمای نقشه یا فریم نقشه نمایش داد. تغییر لایههای یک نقشه همچنین تمام نمایهای نقشه و فریمهای نقشه را که به آن نقشه اشاره میکنند تغییر میدهد.
نقشه ها با استفاده ازlistMaps()روش ازپروژه ArcGISکلاس این روش لیستی ازنقشهاشیاء در یک پروژه نحو است
ArcGISProject.listMaps({wild_card})
توجه داشته باشید:روش را می توان به سادگی به عنوانlistMaps()بجایArcGISProject.listMaps(). با این حال، ماژول نگاشت چندین کلاس دارد و هر کلاس چندین متد دارد. برخی از این روش ها نام یکسانی دارند، در حالی که برخی دیگر کاملاً مشابه هستند. برای جلوگیری از سردرگمی، ارجاع به روش های این فصل از<object>.<روش>هنگام توضیح نحو، علامت گذاری کنید تا مشخص شود که متد متعلق به کدام شی است.
هنگامی که فهرستی از نقشه ها را در یک پروژه دارید، می توانید آنها را بررسی کنید یا ویژگی های آنها را تغییر دهید. با اجرای کد زیر لیستی از تمام نقشه های یک پروژه چاپ می شود:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
maps = aprx.listMaps()
برای m در نقشه ها:
چاپ (m.name)
del aprx
یک یادداشت در مورد نامگذاری متغیر در دستور کار است. کد مثال قبلی از متغیر نام maps برای لیست نقشه ها استفاده می کند، اما این لیست را می توان هر چیز دیگری نامید، مانند mymaps یا maplist. هنگام تکرار بر روی لیست نقشه ها در اسکریپت مثال، از نام متغیر m استفاده می شود. به طور شهودی، نقشه در عوض نام متغیر خوبی خواهد بود. با این حال،نقشه ()یکی از توابع داخلی پایتون است. این یک تابع را برای تمام عناصر یک تکرار اعمال می کند، و یک شی نقشه را برمی گرداند. این تابع و شیئی که برمی گرداند، کاملاً با نقشه های ArcGIS Pro متفاوت است. استفاده از نقشه متغیر در کد شما با توانایی استفاده از آن مغایرت داردنقشه ()تابع، و به طور کلی، استفاده از توابع داخلی و کلمات کلیدی به عنوان نام متغیرها، تمرین کدنویسی ضعیفی است. بنابراین، مهم نیست که نقشه نام متغیر چقدر بصری به نظر می رسد، نباید در اسکریپت های شما استفاده شود. مثالهای این فصل بیشتر از نام متغیر m استفاده میکنند، اما جایگزینهای خوب mymap، map1، newmap و غیره هستند. جایگزین دیگر استفاده از mp است، اما این نام می تواند منجر به سردرگمی شود زیرا این نام خود ماژول نقشه برداری است.
در ArcGIS Pro امکان داشتن چندین نقشه وجود دارد که از یک نام استفاده می کنند. هنگام تلاش برای ارجاع به نقشهها در پایتون، نامهای یکسان گیجکننده میشوند، و بنابراین مهم است که هر نقشه را بهطور منحصربهفرد نامگذاری کنید تا بتوان با استفاده ازنامویژگی.
اگر می خواهید فقط با یکی از نقشه ها کار کنید، می توانید از شماره فهرست آن به صورت زیر استفاده کنید:
m = aprx.listMaps()[2]
ترتیب فهرست نقشه ها مانند ترتیب استفاده شده در ArcGIS Pro است که بر اساس حروف الفبا است. همچنین می توانید از گزینه اختیاری استفاده کنیدwild_cardدارایی ازArcGISProject.listMaps()روشی برای فیلتر کردن لیست حاصل بر اساس نام نقشه. با این حال به خاطر داشته باشید کهArcGISProject.listMaps()همیشه لیستی ازنقشهاشیاء، حتی اگر لیست فقط شامل یک نقشه باشد. بنابراین، حتی زمانی که لیست را برای به دست آوردن یک نقشه واحد فیلتر می کنید، همچنان باید از یک شاخص برای بدست آوردن نقشه از لیست استفاده کنید. به عنوان مثال، کد زیر یک تک به دست می آوردنقشهشی به نام پارک:
m_parks = aprx.listMaps(“پارک ها”)[0]
شاخص صفر [0] اولین (و تنها) نقشه را از لیست به دست می آورد.
حروف عام به حروف کوچک و بزرگ حساس نیست و میتوانید از ترکیبی از ستارهها و کاراکترها برای محدود کردن نتایج استفاده کنید. برای مثال، «پارک» همان «پارک» است، در حالی که «پارک*» نتیجه را محدود به نقشههایی میکند که با کاراکترهای «پارک» شروع میشوند، از جمله «پارک»، «پارک»، «مدیریت پارک» و غیره. .
یک راه جایگزین برای دسترسی به نقشه ها استفاده از a استMapFrameهدف – شی. قاب نقشه عنصری در طرح بندی برای نمایش محتویات نقشه است. میتوانید تمام فریمهای نقشه را در یک طرحبندی فهرست کنید، و سپس از طریق ویژگیهایMapFrameهدف – شی. بنابراین، دو رویکرد برای به دست آوردننقشهاشیاء هستندArcGISProject.listMaps()روش وMapFrame.mapویژگی. اولی لیستی از نقشه ها را برمی گرداند، در حالی که دومی یک نقشه واحد را برمی گرداند. بخشهای 11.11 و 11.12 اطلاعات بیشتری در مورد استفاده از طرحبندی و فریمهای نقشه ارائه میدهند. شما می توانید استفاده کنیدarcpy.mpبرای کار با نقشه ها و فریم های نقشه در یک پروژه، اما نمی توانید به نمای نقشه دسترسی داشته باشید. درarcpy.mpماژول شامل aMapViewکلاس، اما یک نقشه وب را چاپ می کند یا به آن دسترسی پیدا می کند که حاوی عناصر طرح بندی صفحه نیست و مستقل از هر گونه نمای نقشه ذخیره شده در یک پروژه است.
آنقشهشی چندین ویژگی دارد. شما قبلا دیده ایدنامویژگی، که خواندن و نوشتن است. سایر خواص مهم عبارتند ازنوع نقشه،نقشه واحدها، ومرجع مقیاس. درنوع نقشهویژگی فقط خواندنی است و مقدار رشته ای MAP را برای نقشه های دو بعدی و SCENE را برای نقشه های سه بعدی برمی گرداند. نوع نقشه مهم است زیرا نوع آن بر نحوه استفاده از دوربین ها برای نقشه تأثیر می گذارد. دوربین ها ویژگی های نمایش مانند مقیاس و وسعت برای نقشه های دو بعدی و موقعیت مشاهده برای نقشه های سه بعدی را کنترل می کنند. درنقشه واحدهاویژگی فقط خواندنی است و رشته ای را با واحدهای نقشه تنظیم شده برای نقشه برمی گرداند. درمرجع مقیاسخواندن و نوشتن است و امکان دسترسی به مقیاس مرجع نقشه را فراهم می کند. کد زیر این ویژگی ها را می خواند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
چاپ (m.mapType)
چاپ (m.mapUnits)
چاپ (m.referenceScale)
del aprx
یک نتیجه معمولی به شرح زیر است:
نقشه
پا_ایالات متحده
100000.0
آنقشهشی نیز چندین روش برای مدیریت محتویات خود دارد. بیشتر این روشها به دو دسته کلی تقسیم میشوند: روشهایی برای افزودن، حذف یا مرتب کردن مجدد لایهها و جداول، و روشهایی برای فهرست کردن لایهها و جداول موجود. مرتبط ترین روش ها برای دستکاری لایه ها در نقشه به شرح زیر است:
- addBasemap()- یک لایه بیس مپ را در نقشه اضافه یا جایگزین کنید
- addDataFromPath()- با ارائه یک مسیر یا URL محلی، یک لایه به نقشه اضافه کنید
- addLayer()- با استفاده از گزینه های اصلی قرار دادن یک لایه به نقشه اضافه کنید
- addTable()- اضافه کردن جدول به نقشه
- insertLayer()- با تعیین یک مکان خاص، یک لایه به نقشه اضافه کنید
- moveLayer()- یک لایه یا لایه گروه را به یک مکان خاص در پشته لایه منتقل کنید
- removeLayer()- حذف یک لایه از نقشه
- removeTable()- حذف جدول از نقشه
در بخش بعدی کار با لایهها، مهمترین این روشها با جزئیات بیشتری بررسی میشود. دو روش برای فهرست کردن محتویات نقشه عبارتند ازMap.listLayers()(لیستی ازلایهاشیاء) وMap.listTables()(لیستی ازجدولاشیاء).
روش های مختلف اغلب با هم کار می کنند. به عنوان مثال، شما ممکن است استفاده کنیدMap.listLayers()برای به دست آوردن یک لایه خاص در نقشه و سپس استفاده ازMap.addLayer()یاMap.insertLayer()برای اضافه کردن اینلایهبه یک نقشه متفاوت در همان پروژه اعتراض کنید.
همچنین ممکن است متوجه الگویی شده باشید که چگونهarcpy.mpماژول کار می کند شما یک شی ایجاد می کنید (به عنوان مثال،پروژه ArcGIS، و سپس از یک روش لیست شی استفاده کنید (مثلاArcGISProject .listMaps()برای به دست آوردن عناصر خاص (مثلانقشهاشیاء). متد لیستی از اشیا را برمی گرداند و شما از روش فهرست دیگری استفاده می کنید (مثلاًMap.listLayers()) برای به دست آوردن عناصر بعدی (به عنوان مثال،لایهاشیاء). این سازمان یک جریان شی گرا برای کد شما فراهم می کند. این جریان تا حدودی با سایر جنبههای ArcPy متفاوت است، که از توابع فهرست مستقل استفاده میکنند (به عنوان مثال،ListFeatureClasses()) به جای روش ها.
11.6کار با لایه ها
یک نقشه در ArcGIS Pro معمولاً شامل یک یا چند لایه است. یک لایه مرجعی است به منبع داده، مانند فایل شکل، کلاس ویژگی پایگاه داده جغرافیایی، یا شطرنجی که نحوه نمادسازی داده ها را بر روی نقشه مشخص می کند. دو کلاس درarcpy.mpکار با لایه ها:لایهوLayerFile. از هر دو نوع شی برای مدیریت لایه ها استفاده می شود و بسیاری از خواص و روش های آنها مشابه است. هر یک رویکرد کمی متفاوت به لایه های مرجع را نشان می دهد که در سراسر این بخش نشان داده شده است.
لایه های موجود در نقشه را می توان با استفاده ازMap.listLayers()روش. نحو است
Map.listLayers({wildcard})
هیچ پارامتر مورد نیازی وجود ندارد. برای محدود کردن نتیجه میتوان از یک پارامتر wildcard اختیاری استفاده کرد. این روش لیستی ازلایهاشیایی که دارای خواص و روش هستند. برای مثال، کد زیر روی نقشههای یک پروژه تکرار میشود و سپس نام تمام لایههای هر نقشه را چاپ میکند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
maps = aprx.listMaps()
برای m در نقشه ها:
print(“نقشه:” + m.name)
lyrs = m.listLayers()
برای lyr در lyrs:
چاپ (lyr.name)
del aprx
می توانید با استفاده از یک شاخص و/یا پارامتر wildcard به یک لایه خاص ارجاع دهید. به عنوان مثال، کد زیر لایه ای به نام city_parks را در داخل نقشه ای به نام Parks برمی گرداند و منبع داده لایه را چاپ می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
parklyr = m.listLayers(“parks_city”)[0]
print(parklyr.dataSource)
از آنجایی که متدهای لیست یک لیست پایتون را برمی گرداند، برای برگرداندن شی نقشه و شی فهرست به جای لیست، به اندیس صفر [0] نیاز است. اعداد شاخص برای لایه ها در نقشه بر اساس ترتیب لایه ها در فهرست مطالب از بالا به پایین ایجاد می شود.
منبع داده به دست آمده است
C:\Mapping\Data.gdb\city_parks
لایهاشیا دارای خواص زیادی هستند و شما قبلاً دیده ایدنامومنبع اطلاعات. با این حال، انواع مختلفی از لایه ها در ArcGIS Pro وجود دارد که انواع مختلفی از داده ها را نشان می دهد. درarcpy.mpماژول از یک واحد استفاده می کندلایهشیء برای نشان دادن همه انواع. انواع لایه های مختلف در ArcGIS Pro شامل لایه سه بعدی، لایه نقشه پایه، لایه ویژگی، لایه گروه، لایه تحلیلگر شبکه، لایه داده شبکه، لایه شطرنجی و لایه وب است. به جای استفاده از خاصیت نوع تک لایه، نوع لایه با استفاده از یک تعیین می شوداست*دارایی – یعنیis3DLayer،isBasemapLayer است،isFeatureLayer، و غیره. این ویژگی ها بسته به اینکه لایه ای از آن نوع باشد، یک Boolean برمی گرداند. فقدان یک ویژگی واحد برای تعیین نوع لایه، تعیین انواع لایه ها در نقشه را دشوار می کند زیرا باید هر نوع را با استفاده از یک سری از بررسی کنید.اگربیانیه. به عنوان مثال، نقشه ای با چندین لایه را در نظر بگیرید.
کد زیر لایه ها را برای سه نوع مختلف بررسی می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyrs = m.listLayers()
برای lyr در lyrs:
if lyr.isBasemapLayer:
print(lyr.name + “لایه نقشه پایه است”)
if lyr.isFeatureLayer:
print(lyr.name + “یک لایه ویژگی است”)
if lyr.isRasterLayer:
print(lyr.name + “یک لایه شطرنجی است”)
del aprx
نتیجه به صورت زیر چاپ می شود:
history_landmarks یک لایه ویژگی است
city_parks یک لایه ویژگی است
نقشه توپوگرافی جهان یک لایه نقشه پایه است
اسکریپت تنها برخی از رایج ترین انواع لایه ها را در نظر می گیرد. نوع لایه مهم است زیرا همه لایه ها از همه ویژگی ها پشتیبانی نمی کنند. به عنوان مثالdefinitionQueryویژگی (پرس و جوی تعریف یک لایه) برای لایه های ویژگی اعمال می شود اما نه لایه های شطرنجی. بنابراین معمول است که قبل از استفاده از ویژگی های خاص، نوع لایه یک لایه را بررسی کنید.
چندین نوع لایه تخصصی هیچاست*ویژگی، از جمله حاشیه نویسی، ویژگی های ابعاد، مجموعه داده های زمین، مجموعه داده های توپولوژی و چندین مورد دیگر. از آنجایی که نمی توانید نوع این لایه ها را تعیین کنید، ممکن است لازم باشد قبل از تلاش برای دریافت یا تنظیم مقدار آن، بررسی کنید که آیا یک لایه خاص از یک ویژگی پشتیبانی می کند یا خیر.
یک جایگزین برای تعیین نوع لایه استفاده ازپشتیبانی می کند()روش بر روی الفلایهشیء برای تست اینکه آیا یک لایه از یک ویژگی خاص پشتیبانی می کند یا خیر، قبل از تلاش برای اعمال یک ویژگی به آن لایه. این تست سادهتر از تعیین نوع لایه و سپس تعیین اینکه آیا یک ویژگی برای آن نوع اعمال میشود یا خیر آسانتر است. نحو برایپشتیبانی می کند()روش است
Layer.supports(layer_property)
درپشتیبانی می کند()متد یک Boolean برمی گرداند تا نشان دهد که آیا یک لایه از آن ویژگی پشتیبانی می کند یا خیر. شما می توانید تنها یک ویژگی را در یک زمان آزمایش کنید. همه خصوصیات نباید با استفاده از آن آزمایش شوندپشتیبانی می کند(). برای مثال، خواص بولی مقداری از را برمیگرداندنادرستاگر آن ویژگی لایه برای آن نوع لایه پشتیبانی نمیشود، میتوانید مستقیماً بدون استفاده از آن ویژگی را بررسی کنیدپشتیبانی می کند().
کد مثال زیر تعیین میکند که آیا لایههای یک نقشه از یک کوئری تعریف پشتیبانی میکنند یا خیر:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyrs = m.listLayers()
برای lyr در lyrs:
dq = str(lyr.supports(“DEFINITIONQUERY”))
print(lyr.name + ” از پرس و جوی تعریف پشتیبانی می کند: ” + dq)
del aprx
نتیجه به صورت زیر چاپ می شود:
history_landmarks از پرس و جوی تعریف پشتیبانی می کند: درست است
city_parks از پرس و جوی تعریف پشتیبانی می کند: درست است
نقشه جهانی توپوگرافی از پرس و جوی تعریف پشتیبانی می کند: نادرست
استفاده ازپشتیبانی می کند()روش تا حد زیادی نیاز به به دام انداختن خطا را کاهش می دهد زیرا می توانید از قبل تعیین کنید که آیا یک ویژگی خاص برای یک لایه خاص اعمال می شود یا خیر.
چندین خاصیت دیگر ازلایهاشیاء مورد توجه هستند، به ویژه آنهایی که مربوط به نمایش و نمادشناسی هستند:
- روشنایی- یک مقدار صحیح بین -100 و 100
- تضاد- یک مقدار صحیح بین -100 و 100
- نشان دادن برچسب ها- یک Boolean برای کشیدن برچسب یا نه
- نماد شناسی-دسترسی به نماد شناسی یک لایه را فراهم می کند و a را برمی گرداندنمادشناسیهدف – شی
- شفافیت- یک مقدار صحیح بین 0 تا 100
- قابل رویت- یک Boolean برای رسم لایه یا نه
همه این ویژگی ها خواندن و نوشتن هستند. ویژگی هایی که اعداد صحیح هستند، ویژگی های معمولی برای بررسی با استفاده ازپشتیبانی می کند()روش. کد مثال زیر تست می کند که آیا یک لایه از شفافیت پشتیبانی می کند یا خیر، و اگر این کار را انجام داد، ویژگی شفافیت روی 50٪ تنظیم می شود:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyr = m.listLayers(“city_parks”)[0]
if lyr.supports (“شفافیت”):
lyr.transparency = 50
aprx.save()
del aprx
توجه داشته باشید:به یاد بیاورید کهصرفه جویی()روش برای اعمال تغییرات در پروژه مورد نیاز است. شما همچنین می توانید استفاده کنیدsaveACopy()و یک نام برای پروژه جدید مشخص کنید.
لایهاشیا علاوه بر چندین روش دیگر نیز دارندپشتیبانی می کند(). این روش ها شاملsaveACopy()روش ذخیره یک لایه در یک فایل لایه (lyrx.) روی دیسک. ذخیره یک کپی از لایه امکان استفاده از یک لایه را در یک پروژه متفاوت فراهم می کند.
همانطور که در ابتدای این بخش ذکر شد، کلاس دیگری برای کار با لایه ها وجود دارد:LayerFile. درarcpy.mp.LayerFile()تابع به یک فایل لایه (.lyr یا .lyrx) روی دیسک ارجاع می دهد. این رویکرد مشابه نحوه ارجاع فایل های پروژه (aprx.) است. نحو ازLayerFile()تابع است
arcpy.mp.LayerFile(lyr_file_path)
پارامتر ازLayerFile()تابع مسیر کامل و نام فایل یک فایل .lyr یا .lyrx موجود است. مثلا:
lyrx = arcpy.mp.LayerFile (“C:/Mapping/examplelyr.lyrx”)
درLayerFile()تابع a را برمی گرداندLayerFileشی، به این معنی کهLayerFileهم تابع و هم کلاس استarcpy.mp. درLayerFileکلاس شامل ویژگی ها و روش هایی برای دسترسی به لایه های جداگانه موجود در یک فایل لایه است.
توجه داشته باشید:فایل های لایه می توانند شامل یک یا چند لایه باشند. هر لایه همچنین می تواند شامل لایه های گروهی باشد. این ویژگی ها کار با فایل های لایه را نسبتاً پیچیده می کند. اکثر کدهای مثال استفاده شده در این فصل فرض میکنند که فایلهای لایه فقط یک لایه جداگانه دارند. جزئیات کار با چندین لایه و لایه های گروهی در یک فایل لایه را می توان در صفحات راهنمای ArcGIS Pro درLayerFileکلاس و عملکرد
ArcGIS Pro می تواند فایل های .lyr و .lyrx را بخواند. قالب .lyr یک قالب قدیمی از ArcGIS Desktop 10.x است. تفاوت های قابل توجهی بین فایل های .lyr و .lyrx وجود دارد و نمی توان آنها را به جای هم استفاده کرد. در نتیجه، در ArcGIS Pro، فقط می توانید فایل های .lyrx را ذخیره کنید. بنابراین، اگر در حال ایجاد تغییرات در فایل .lyr هستید، باید تغییرات را با استفاده از آن ذخیره کنیدLayerFile.saveACopy()روش. از سوی دیگر، استفاده از میراث نسبتاً آسان است.lyrفایلها در ArcGIS Pro برای اضافه کردن یک لایه یا اختصاص نمادشناسی به لایههای موجود، و لایهها و نماد آنها را میتوان به عنوان بخشی از پروژه بدون نیاز به ذخیره آنها به عنوان فایلهای .lyrx ذخیره کرد.
نام لایه ها می تواند گیج کننده باشد. نام یک لایه همان چیزی است که در قسمت Contents در ArcGIS Pro نشان داده شده است. این نام ممکن است با نام مجموعه داده منبع برای لایه یکسان باشد یا نباشد. به طور پیش فرض، زمانی که مجموعه داده ای به نقشه اضافه می شود، نام لایه با نام مجموعه داده منبع یکی است، اما نام لایه را می توان تغییر داد. در هر صورت نام یک لایه پسوند فایل ندارد. به عنوان مثال، نام یک کلاس ویژگی می تواند hospitals.shp باشد، اما به عنوان یک لایه در ArcGIS Pro، نام لایه به طور پیش فرض بیمارستان ها است.
همچنین به یاد داشته باشید که رشته ها به حروف بزرگ و کوچک حساس هستند، بنابراین بیمارستان ها با بیمارستان ها متفاوت هستند. برای اینکه عبارات خود را به حروف بزرگ و کوچک حساس نکنید، می توانید از عملگرهای رشته ای اصلی استفاده کنید. مثلا:
if lyr.name.lower() == “hospitals”:
چندین ویژگی لایه دیگر شامل نام ها می شود. درمنبع اطلاعاتویژگی مسیر کامل منبع لایه را باز می گرداند که شامل مسیر کامل فضای کاری و نام مجموعه داده است. به عنوان مثال، برای لایه ای که به عنوان Hospitals در قسمت Contents ظاهر می شود،ناماموال خواهد بود بیمارستان ها، ومنبع اطلاعاتاموال می تواند چیزی مانند C:\Data\hospitals.shp باشد. درمنبع اطلاعاتویژگی فقط خواندنی است، در حالی کهنامویژگی خواندن و نوشتن است. در نهایت، وجود داردنام بلندویژگی، که برای توصیف لایه های گروه مفید است زیرا شامل ساختار پوشه لایه گروه است.
11.7افزودن، حذف، درج و جابجایی لایه ها
یکی از کارهای معمولی که باarcpy.mpماژول برای دستکاری لایه ها در یک یا چند نقشه است. این دستکاری شامل افزودن، حذف، درج و جابجایی لایه ها است. درنقشهشی برای هر یک از این وظایف متدهایی دارد. هر یک از این روش ها در یک زمان با یک لایه کار می کنند. برای دستکاری بیش از یک لایه، به نوعی تکرار برای تکرار مراحل نیاز دارید.
Basemaps را می توان به نقشه ArcGIS Pro از ArcGIS Online اضافه کرد. برای اضافه کردن نقشه پایه، روی تب Map کلیک کنید، روی Basemap کلیک کنید و یک نوع نقشه پایه را انتخاب کنید. درMap.addBasemap()متد این قابلیت را در ArcPy تکرار می کند. نحو این تابع است
Map.addBasemap(basemap_name)
تنها پارامتر مورد نیاز نام بیس مپ است که در گالری بیس مپ ها در ArcGIS Pro ظاهر می شود. اگر نقشه پایه در نقشه وجود نداشته باشد، نقشه جدید اضافه خواهد شد. اگر نقشه پایه از قبل وجود داشته باشد، با نقشه جدید جایگزین می شود. شما می توانید تنها از یک نقشه پایه در یک زمان استفاده کنید. همانطور که در شکل نشان داده شده است، محتویات یک نقشه را با نقشه پایه توپوگرافی در نظر بگیرید.
کد زیر بیس مپ موجود را با کد دیگری جایگزین می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
m.addBasemap (“تصویر”)
aprx.save()
del aprx
نتیجه این است که نقشه پایه توپوگرافی با نقشه پایه تصویر جایگزین می شود.
توجه داشته باشید کهbasemap_nameپارامتر براساس نام نمایشی در گالری نقشه پایه (یعنی Imagery) است و نه نام لایه پس از اضافه شدن به نقشه (یعنی World Imagery).
می توانید با استفاده از نقشه پایه را حذف کنیدMap.removeLayer()روش.
در ArcGIS Pro، میتوانید با کشیدن یک مجموعه داده از صفحه کاتالوگ یا با کلیک کردن روی افزودن داده در برگه نقشه، دادهها را به نقشه اضافه کنید. این قابلیت در ArcPy با استفاده ازMap .addDataFromPath()روش. نحو این روش است
Map.addDataFromPath(مسیر_داده)
درمسیر دادهپارامتر رشته ای است که یک مسیر یا URL محلی را نشان می دهد. کد زیر یک کلاس ویژگی را به نقشه موجود اضافه می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
m.addDataFromPath(“C:/Mapping/Data.gdb/sidewalks”)
aprx.save()
del aprx
کلاس ویژگی به عنوان یک لایه بر اساس قوانین استاندارد برای وزن لایه و نوع هندسه اضافه می شود، مشابه نحوه اضافه شدن یک لایه از داخل برنامه ArcGIS Pro. در این مثال، لایه ویژگی polyline در زیر لایه ویژگی نقطه موجود و بالای لایه ویژگی چند خط موجود اضافه شده است.
یک لایه را می توان با استفاده ازMap.removeLayer()روش. نحو این روش است
Map.removeLayer(remove_layer)
درremove_layerپارامتر a استلایههدف – شی. این نحو به این معنی است که شما نمی توانید یک لایه را مستقیماً با نام یا فهرست آن فراخوانی کنید، اما باید یک را ایجاد کنیدلایهاول اعتراض همانطور که در مثال های قبلی مشاهده شد، می توانید a ایجاد کنیدلایهشی با استفاده ازMap.listLayers()روش با ترکیبی از نام لایه و شاخص. کد حذف یک لایه خاص به صورت زیر است:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyr = m.listLayers(“نقاط_تاریخی”)[0]
m.removeLayer(lyr)
aprx.save()
del aprx
این کد همانطور که در شکل نشان داده شده است لایه خاصی را حذف می کند.
اگر از قبل شماره فهرست لایه ای را که باید حذف شود می دانید، شماره فهرست به تنهایی کافی است. وقتی از نام لایه برای ایجاد استفاده می کنیدلایهشی، همچنان باید از شاخص صفر [0] استفاده کنید زیراMap.listLayers()متد لیستی ازلایهاشیاء.
علاوه بر افزودن یک لایه جدید به نقشه با ارجاع داده ها بر روی دیسک، می توانید یک لایه با ارجاع به یکلایهیاLayerFileهدف – شی. شما می توانید یک لایه با استفاده ازMap.addLayer()وMap.insertLayer()مواد و روش ها. این روشها به روشهای مشابهی کار میکنند، اما روش دوم کنترل دقیقتری بر روی قرار دادن لایهها فراهم میکند. نحو برای اولین از این دو روش است
Map.addLayer(add_layer_or_layerfile، {add_position})
پارامتر اول ارجاع به یک موجود استلایهیاLayerFileشی، در حالی که دومین پارامتر اختیاری محل قرارگیری لایه را تعیین می کند. گزینههای قرارگیری شامل AUTO_ARRANGE (پیشفرض) بر اساس قوانین وزن لایه و هندسه، BOTTOM (در پایین پشته لایه) و TOP (در بالای پشته لایه) است. مثال کد یک را ایجاد می کندLayerFileبا ارجاع به یک فایل .lyrx روی دیسک شیء کنید و سپس این لایه را به صورت زیر به نقشه اضافه کنید:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyr = arcpy.mp.LayerFile (“C:/Mapping/hospitals.lyrx”)
m.addLayer(lyr)
aprx.save()
del aprx
این لایه بر اساس گزینه قرار دادن AUTO_ARRANGE پیش فرض به موقعیت بالا اضافه می شود.
این نحو به نظر می رسدaddDataFromPath()روش، اما یک فایل .lyrx نه تنها شامل ارجاع به داده های منبع، بلکه نمادهای سفارشی ایجاد شده توسط نویسنده فایل لایه است. یک فایل .lyrx را می توان با استفاده از ابزار geoprocessing فایل ذخیره در لایه ایجاد کرد. ایجاد فایل های لایه معمولاً برای به اشتراک گذاری نمادشناسی بین پروژه ها و بین کاربران استفاده می شود.
درMap.addLayer()روش همچنین می تواند استفاده از aلایهشی به جای الفLayerFileهدف – شی. یک کاربرد معمولی این رویکرد ارجاع به یک لایه در یک نقشه و افزودن آن به نقشه دیگری در همان پروژه است. کد زیر به لایه ای به نام city_parks در نقشه پارک ها اشاره می کند و سپس این لایه را به نقشه امکانات اضافه می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyr = m.listLayers(“city_parks”)[0]
m = aprx.listMaps(“امکانات”)[0]
map.addLayer(lyr، “BOTTOM”)
aprx.save()
del aprx
این رویکرد می تواند به پروژه های متعدد بسط داده شود. برای مثال، میتوانید به یک لایه در یک پروژه ارجاع دهید و آن را به پروژه دیگری اضافه کنید، بدون اینکه نیازی به ایجاد یک فایل لایه روی دیسک باشد.
درMap.insertLayer()روش بسیار شبیه بهMap.addLayer()روش. نحو به شرح زیر است:
Map.insertLayer(لایه_مرجع، درج_لایه_یا_لایه فایل،
{insert_position})
پارامتر اول a استلایهشی نشان دهنده یک لایه موجود در یک نقشه برای استفاده به عنوان مرجع برای اهداف قرار دادن است. پارامتر دوم a استلایهیاLayerFileشی نشان دهنده لایه ای است که باید اضافه شود، همچنین به عنوان “لایه منبع” شناخته می شود. پارامتر سوم رشته ای است برای تعیین اینکه آیا لایه قبل یا بعد از لایه مرجع در پشته لایه اضافه می شود. کد مثال زیر لایه منبع را در یک موقعیت خاص در پشته لایه وارد می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
m = aprx.listMaps(“پارک ها”)[0]
lyr = m.listLayers(“city_parks”)[0]
m = aprx.listMaps(“امکانات”)[0]
reflyr = m.listLayers(“بسته ها”)[0]
m.insertLayer(reflyr، lyr، “پیش از”)
aprx.save()
del aprx
در نهایت،Map.moveLayer()روش متکی بر همان مفهوم یک لایه مرجع برای کنترل قرارگیری در پشته است. نحو است
Map.moveLayer(لایه_مرجع، لایه_حرکت، {insert_position})
این روش یک لایه موجود را می گیرد و آن را به مکان جدیدی در پشته لایه قبل یا بعد از لایه مرجع منتقل می کند. این رویکرد فقط برای جابجایی یک لایه در یک نقشه قابل استفاده است.
11.8کار با نمادشناسی لایه
یکی از جنبه های مهم کار با لایه ها نمادشناسی آنها است. زمانی که بالایهاشیاء، نماد شناسی آنها حفظ می شود. به عنوان مثال، هنگام ارجاع به یک لایه در یک نقشه و استفاده ازMap.insertLayer()روش اضافه کردن لایه به نقشه دیگر، نماد شناسی یکسان است. علاوه بر این، شما می توانید برخی از جنبه های نمادشناسی را از طریق ویژگی های آن تغییر دهیدلایهجسم، از جمله روشنایی، کنتراست، و شفافیت. این ویژگی ها خواندن و نوشتن هستند. با این حال، بسیاری از جنبه های دیگر نمادشناسی به کنترل دقیق تری نیاز دارند. کار با نمادشناسی از طریق انجام می شودنمادشناسیکلاس، که از طریقنماد شناسیدارایی aلایههدف – شی. در یک گردش کار معمولی، شما بهنماد شناسیویژگی یک لایه، تغییراتی در آن ایجاد کنیدنمادشناسیشی و سپس این تغییرات را روی لایه اعمال کنید.
درنمادشناسیکلاس دو ویژگی دارد که نحوه نمادسازی یک لایه را مشخص می کند:رنگ دهنده(برای لایه های شطرنجی) وارائه دهنده(برای لایه های ویژگی). این ویژگی ها رنگ دهنده یا رندر مورد استفاده برای نماد لایه را برمی گرداند. همچنین میتوانید نوع رنگکننده یا رندر را با استفاده از آن تغییر دهیدupdateColorizer()(برای لایه های شطرنجی) وupdateRenderer()روش های (برای لایه های ویژگی).
از آنجا کهنمادشناسیclass برای هر دو لایه شطرنجی و ویژگی استفاده می شود، قبل از هر گونه تغییر باید نوع لایه را بررسی کنید. دررنگ دهندهوارائه دهندهخواص به ترتیب یک شی رنگساز و رندر را برمیگردانند. چندین کلاس مختلف برای لایههای شطرنجی و لایههای ویژگی وجود دارد و هر یک از این کلاسها بر اساس ماهیت نمادشناسی، ویژگیهای متفاوتی دارند. تمام کلاس های مختلف دارای یکنوعویژگی مشترک که می توان از آن برای تعیین نوع رنگ دهنده و رندر استفاده کرد.
نقشه مثال را با چندین لایه مختلف، همانطور که در شکل نشان داده شده است، در نظر بگیرید.
شرح
محتویات برای نقشه ای به نام پارک ها با چندین لایه ویژگی (تاسیسات، مسیرها، و پارک ها) و دو لایه شطرنجی (کاربری زمین و ارتفاع) نمایان می شود.
این لایه ها با استفاده از تنظیمات پیش فرض به یک نقشه خالی جدید اضافه شدند. درنمادشناسیکلاس می تواند برای تعیین نوع رنگ دهنده یا رندر استفاده شود. یکی از عوامل پیچیده این است که همه لایههای شطرنجی یا لایههای ویژگی به ترتیب رنگکننده یا رندر معتبر ندارند. بنابراین، علاوه بر بررسی نوع لایه (رستر یا ویژگی)، باید مطمئن شوید که یک لایه از رنگکننده یا رندر پشتیبانی میکند. می توانید این بررسی را با استفاده از داخلی پایتون انجام دهیدhasattr()متد، مختصر عبارت «دارای ویژگی» است. این متد بررسی می کند که آیا یک شی دارای یک ویژگی نامگذاری شده است یا خیر، و متد یک Boolean برمی گرداند.
کد مثال زیر بر روی لایه ها در نقشه تکرار می شود. برای هر لایه، یک را ایجاد می کندنمادشناسیشی با استفاده ازنماد شناسیدارایی ازلایههدف – شی. سپس دو بررسی را انجام می دهد: (1) نوع لایه و (2) اینکه آیا لایه از رنگ دهنده یا رندر پشتیبانی می کند.
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Symbology.aprx”)
m = aprx.listMaps(“Plan”)[0]
lyrs = m.listLayers()
برای lyr در lyrs:
sym = lyr.symbolology
if lyr.isFeatureLayer:
if hasattr(sym، “رندر”):
print(lyr.name + “: ” + sym.renderer.type)
if lyr.isRasterLayer:
if hasattr(sym, “colorizer”):
print(lyr.name + “: ” + sym.colorizer.type)
نتیجه برای پنج لایه در نقشه به صورت زیر چاپ می شود:
امکانات: SimpleRenderer
مسیرها: SimpleRenderer
پارک ها: SimpleRenderer
کاربری زمین: RasterUniqueValueColorizer
برای سه لایه ویژگی، نماد شناسی پیش فرض استSimpleRenderer. برای شطرنجی استفاده از زمین، نماد شناسی پیش فرض استRasterUniqueValueColorizer. هیچ نتیجه ای برای شطرنجی elevation چاپ نمی شود زیرا نوع نماد شناسی Stretch است و هیچ رنگ کننده ای برای این نوع درنمادشناسیهدف – شی.
برای لایه های شطرنجی، دو رنگ کننده وجود دارد:
- RasterClassifyColorizer- مانند نمادشناسی طبقه بندی برای رسترها در ArcGIS Pro
- RasterUniqueValueColorizer- مانند نماد ارزش های منحصر به فرد برای رسترها در ArcGIS Pro
در مقایسه با گزینه های نمادشناسی برای رسترها در ArcGIS Pro، چندین مورد از جمله Stretch، Discrete و Vector Field وجود ندارد.
برای لایه های ویژگی، چهار رنگ کننده وجود دارد:
- GraduatedColorsRenderer-مانند نمادشناسی Graduated Colors برای ویژگیهای ArcGIS Pro
- GraduatedSymbolsRenderer- مانند نماد Graduated Symbols برای ویژگیهای ArcGIS Pro
- SimpleRenderer- مانند نماد شناسی Single Symbol برای ویژگی های ArcGIS Pro
- UniqueValueRenderer- مانند نماد ارزش های منحصر به فرد برای ویژگی های ArcGIS Pro
در مقایسه با گزینههای نمادشناسی برای ویژگیها در ArcGIS Pro، چندین مورد وجود ندارد. آنها شامل رنگ های طبقه بندی نشده، نمادهای متناسب، تراکم نقطه، نمودارها و دیکشنری هستند.
شرح
گزینه های نمادشناسی عبارتند از Single Symbol، Unique Values، Graduated Colors، Graduated Symbols، Unclassed Colors، Proportional Symbols، Dot Density و Dictionary.
انواع مختلف نمادشناسی برای لایه های شطرنجی و ویژگی نشان می دهد که چرا اسکریپت باید نوع لایه را بررسی کند و کدام نماد شناسی پشتیبانی می شود.
اگرچه خواص ازنمادشناسیشی فقط خواندنی است، روش های آن را می توان برای تغییر نوع رنگ دهنده یا رندر استفاده کرد. علاوه بر این، خواص ازنمادشناسیآبجکت به شیء رنگساز یا رندر کننده دسترسی میدهد، که به نوبه خود به ویژگیهایی دسترسی میدهد که قابل تغییر هستند. چند مثال برای نشان دادن چگونگی ایجاد این تغییرات برای انواع مختلف لایهها و نمادها در ادامه میآید.
ابتدا نماد شناسی یک لایه ویژگی چند خطی تغییر می کند. نوع (SimpleRenderer) یکسان نگه داشته می شود، اما رنگ آن تغییر یافته است. درSimpleRendererکلاس یک داردنماددارایی، که a را برمی گرداندنمادهدف – شی. رنگ پلی لاین را می توان با استفاده ازرنگدارایی ازنمادهدف – شی. رنگ یک نماد با استفاده از فرهنگ لغت پایتون برای یک مدل رنگ خاص تنظیم می شود. کد زیر رنگ پلی لاین را با استفاده از مقادیر RGB (قرمز، سبز، آبی) به روز می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Symbology.aprx”)
m = aprx.listMaps(“Plan”)[0]
lyr = m.listLayers(“مسیرها”)[0]
sym = lyr.symbolology
قرمز = {“RGB”: [255، 0، 0، 100]}
if lyr.isFeatureLayer و hasattr(sym, “renderer”):
sym.renderer.symbol.color = قرمز
lyr.symbology = سیم
aprx.save()
del aprx
نتیجه این است که رنگ پلی لاین تغییر می کند.
کد نیاز به کمی توضیح دارد. چهار خط اول کد را ایجاد می کندلایهموضوع مورد علاقه خط بعدیsym = lyr.symbolologya را ایجاد می کندنمادشناسیهدف – شی. رنگ قرمز با استفاده از مقادیر RGB در قالب یک فرهنگ لغت ایجاد می شود. حتی اگر RGB فقط از سه مقدار (برای قرمز، سبز و آبی) استفاده می کند، مدل های رنگی در ArcGIS Pro از یک مقدار اضافی به نام آلفا یا کدورت استفاده می کنند. این مقدار مخالف شفافیت است. به عبارت دیگر، مقدار آلفای 100 به معنای شفافیت 0 درصد است. دو بررسی انجام می شود تا مطمئن شویم لایه یک لایه ویژگی است و از یک رندر پشتیبانی می کند. برای اطمینان از اینکه نوع رندر است، میتوان یک بررسی اضافی انجام دادSimpleRenderer، اما آن چک در اینجا حذف شده است. خطsym.renderer.symbol.color = قرمزمقدار RGB را بهرنگدارایی ازنمادشی، که با استفاده ازنماددارایی ازSimpleRendererشی، که به نوبه خود یکی از ویژگی های استنمادشناسیهدف – شی. کد تا این مرحله در واقع لایه را تغییر نداده است، فقط لایه را تغییر داده استنمادشناسیهدف – شی. بنابراین، نماد شناسی جدید باید با استفاده از لایه اعمال شودlyr .symbology = سیم. و سپس، در نهایت، پروژه ذخیره می شود تا تغییر اعمال شود.
این کد ممکن است فقط برای تغییر رنگ یک لایه ویژگی چند خطی نسبتاً پیچیده به نظر برسد، اما به خاطر داشته باشید که این رویکرد می تواند برای تغییر رنگ بسیاری از لایه ها در بسیاری از نقشه ها در بسیاری از پروژه ها استفاده شود.
کار بانمادclass به شما کنترل دقیقی بر روی ویژگی های نمادهای اصلی از جمله رنگ، رنگ طرح کلی و اندازه می دهد. همچنین می توانید از یک سبک از پیش تعریف شده از گالری نمادها با ارجاع به نام آن استفاده کنید.
هنگامی که نام یک سبک را شناسایی کردید، می توانید نماد شناسی را با استفاده از آن به روز کنیدapplySymbolFromGallery()روش ازنمادکلاس کد به شرح زیر است:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Symbology.aprx”)
m = aprx.listMaps(“Plan”)[0]
lyr = m.listLayers(“مسیرها”)[0]
sym = lyr.symbolology
if lyr.isFeatureLayer و hasattr(sym, “renderer”):
sym.renderer.symbol.applySymbolFromGallery (“نقطه دار 4:4”)
lyr.symbology = سیم
aprx.save()
del aprx
برخی از نمادها نام یکسانی دارند، مخصوصاً برای نمادهای نقطه ای که در آنها از یک نام برای نمادهای مشابه با اندازه های مختلف استفاده می شود. درSymbol.applySymbolFromGallery()روش دارای یک پارامتر دوم اختیاری برای استفاده از یک شاخص برای برگرداندن نماد مورد نظر است. به عنوان مثال، گالری پیش فرض شامل سه علامت با نام بیمارستان است.
شاخص مربوط به ترتیب نمادها در گالری است که با صفر شروع می شود. کد زیر دومین علامت از سه نماد را اعمال می کند، مشروط بر اینکه از یک لایه ویژگی نقطه استفاده شود:
sym.renderer.symbol.applySymbolFromGallery(“Hospital”، 1)
از آنجا که پروژه های مختلف ممکن است مجموعه های متفاوتی از نمادها داشته باشند،Symbol .listSymbolsFromGallery()می توان از این روش برای ایجاد لیستی از نمادها استفاده کرد و سپس می توانید از ویژگی هایی مانند اندازه یا رنگ برای شناسایی نماد مورد علاقه استفاده کنید.
مثالهای تا کنون الف را فرض کردهاندSimpleRenderer، و این نوع ثابت مانده است. انواع دیگر رندر برای لایه های ویژگی هستندGraduatedColorsRenderer،GraduatedSymbolsRenderer، وUniqueValueRenderer. هر نوع رندر دارای ویژگی های متفاوتی است و نیاز به رویکرد کمی متفاوت برای اصلاح نمادشناسی دارد. بخش بعدی به بررسی استفاده ازGraduatedColorsRenderer.
11.9استفاده از نمادشناسی رنگ مدرج
نمادشناسی رنگ فارغالتحصیل شده در ArcGIS Pro یک تکنیک نگاشت موضوعی کمی است که در آن تفاوت در مقادیر ویژگی ویژگیها با استفاده از طیف رنگی نشان داده میشود. این نوع نقشه همچنین به عنوان “نقشه choropleth” شناخته می شود و به طور گسترده برای نقشه برداری از متغیرهای کمی مانند داده های سرشماری جمعیت، اشتغال، قومیت، تحصیلات و غیره استفاده می شود. به طور معمول، متغیرهای مورد استفاده در نگاشت رنگ مدرج نرمال می شوند، به این معنی که آنها برای جمعیت یا منطقه زیربنایی تنظیم می شوند. به عنوان مثال، به جای ترسیم شمارش تعداد افراد بیکار، از کل جمعیت به عنوان یک متغیر نرمالکننده استفاده میشود که منجر به کسری یا درصدی از افراد بیکار میشود. علاوه بر این، نگاشت رنگی درجهبندی شده، ویژگیهای دارای مقادیر مشابه را با استفاده از شکستهای کلاس در یک دسته قرار میدهد. ایجاد یک نقشه رنگ مدرج در ArcGIS Pro مستلزم تصمیم گیری در زمینه مورد استفاده به عنوان متغیر مورد علاقه، فیلد مورد استفاده برای عادی سازی (در صورت وجود)، روش طبقه بندی، تعداد کلاس ها و سطح شیب رنگ است. این تصمیمات درarcpy.mpبا استفاده ازGraduatedColorsRendererکلاس
اگرچه یک لایه ویژگی موجود ممکن است قبلاً دارای این نوع رندر باشد، سناریوی معمولی تر این است که یک لایه دارای رندر پیش فرض باشد (به عنوان مثال،SimpleRenderer) که باید به رندر مورد علاقه تغییر کند. شما رندر را با استفاده ازنماد .updateRenderer()روش.
اسکریپت زیر یک پروژه را باز می کند و به یک لایه در نقشه موجود ارجاع می دهد. این لایه ویژگی چند ضلعی رایج ترین نوع لایه ویژگی است که برای نقشه های رنگی مدرج استفاده می شود. آنمادشناسیشی با استفاده ازsym = lyr.symbolology. دو بررسی انجام می شود تا مطمئن شویم لایه یک لایه ویژگی است و از یک رندر پشتیبانی می کند. کد به شرح زیر است:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“Housing.aprx”)
mymap = aprx.listMaps(“State”)[0]
lyr = mymap.listLayers(“Counties”)[0]
sym = lyr.symbolology
if lyr.isFeatureLayer و hasattr(sym, “renderer”):
sym.updateRenderer (“GraduatedColorsRenderer”)
تا اینجا، این کد تقریباً مشابه نمونه های قبلی است. با این حال، خط آخر کد متفاوت است، زیرا به جای کار با رندر موجود، کدSymbol.updateRenderer()متد برای تغییر رندر لایه استفاده می شود. نتیجه این است که رندر موجود (صرف نظر از نوع آن) با رندر جایگزین می شودGraduatedColorsRenderer. درGraduatedColorsRendererکلاس شامل چندین ویژگی خواندن و نوشتن است که مانند تنظیمات ArcGIS Pro هنگام ایجاد یک نقشه رنگی مدرج است.
مثال زیر از تعداد خام خانههای خالی (در زمینهای به نام VACANT) استفاده میکند و این تعداد را با تعداد خام تمام واحدهای مسکونی (در میدانی به نام HSE_UNITS) عادی میکند و در نتیجه یک کسری ایجاد میشود. یک طبقه بندی با فاصله مساوی با استفاده از پنج کلاس اعمال می شود:
sym.renderer.classificationField = “خالی”
sym.renderer.normalizationField = “HSE_UNITS”
sym.renderer.classificationMethod = “EqualInterval”
sym.renderer.breakCount = 5
گام بعدی در ایجاد نماد رنگ مدرج، اعمال یک رمپ رنگی است. شما یک رمپ رنگی را با استفاده ازcolorRampدارایی ازGradautedColorsRendererکلاس این ویژگی دسترسی بهColorRampکلاس، که امکان استفاده از هر یک از رمپ های رنگی موجود در پروژه را فراهم می کند. رمپ رنگ مستقیماً با نام ارجاع نمی شود، بلکه با استفاده از آن به دست می آیدArcGISProject.listColorRamps()روش. این روش از وجود سطح شیب دار رنگ و ارجاع صحیح آن اطمینان می دهد. آرگومان این روش یک علامت عام بر اساس نام رمپ رنگ است. از آنجایی که متد یک لیست را برمی گرداند، یک شاخص به جای لیست، خود رمپ رنگ را به صورت زیر بدست می آورد:
sym.renderer.colorRamp = aprx.listColorRamps(“زرد-نارنجی-قرمز
(5 کلاس)”)[0]
در نهایت، نماد شناسی جدید با استفاده از لایه اعمال می شودlyr.symbology = سیم، و پروژه برای اعمال تغییرات ذخیره می شود:
lyr.symbology = سیم
aprx.saveACopy (“Housing_Choropleth.aprx”)
del aprx
نتیجه همانطور که در شکل نشان داده شده است.
شرح
صفحه محتویات یک لایه ویژگی به نام Counties را با نماد رنگی درجه بندی شده بر اساس VACANT/HSE_UNITS نشان می دهد.
برای مشاهده لیستی از تمام رمپ های رنگی در یک پروژه، از کد زیر استفاده کنید:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“Housing.aprx”)
ramps = aprx.listColorRamps()
برای رمپ در رمپ:
چاپ (ramp.name)
یک پروژه معمولی چندین صد رمپ رنگی دارد. بسته به اینکه رمپ های رنگی سفارشی ایجاد شده باشند، این تعداد متفاوت است. همچنین توجه داشته باشید که ArcGIS Pro به رمپ های رنگی به عنوان طرح های رنگی اشاره می کند. انواع مختلفی از رمپ های رنگی وجود دارد و همه آنها برای نقشه برداری رنگی درجه بندی شده مناسب نیستند. علاوه بر این، برخی از رمپ های رنگی را می توان برای هر تعداد کلاس استفاده کرد (به عنوان مثال، زرد-سبز-آبی (پیوسته))، در حالی که برخی از رمپ های رنگی برای تعداد خاصی از کلاس ها ایجاد می شوند (مثلاً زرد-نارنجی-قهوه ای (5 کلاس) )). توصیه می شود قبل از استفاده از رمپ های رنگی خاص در برنامه ArcGIS Pro قبل از استفاده از آنها در یک اسکریپت آشنا شوید.
11.10استفاده از نمادشناسی در لایه های شطرنجی
لایههای شطرنجی از دو رنگکننده پشتیبانی میکنند تا با نمادشناسی خود کار کنندarcpy.mp:RasterClassifyColorizer، که مانند نماد Classify برای رسترها در ArcGIS Pro است وRasterUniqueValueColorizer، که مانند نماد ارزش های منحصر به فرد برای شطرنجی ها است.
درRasterUniqueValueColorizerمعمولاً برای داده های طبقه بندی شده مانند کاربری زمین استفاده می شود. مثال قبلی لایه شطرنجی را با استفاده از نمادشناسی پیش فرض در نظر بگیرید.
نوع رنگکنندهای که در اینجا استفاده میشود، درست است و برچسبهای توصیفی معنیدار هستند، اما رنگها مناسب نیستند. درRasterUniqueValueColorizerکلاس می تواند این رنگ ها را به روز کند.
اسکریپت زیر یک پروژه را باز می کند و به یک لایه شطرنجی در نقشه موجود ارجاع می دهد. آنمادشناسیشی با استفاده ازsym = lyr.symbolology. یک بررسی انجام می شود تا مطمئن شود لایه از a استفاده می کندRasterUniqueValueColorizer.
واردات کمان
aprx = arcpy.mp.ArcGISProject(“Rasters.aprx”)
studymap = aprx.listMaps(“مطالعه”)[0]
lyr = studymap.listLayers(“استفاده از زمین”)[0]
sym = lyr.symbolology
if sym.colorizer.type == “RasterUniqueValueColorizer”:
خواص ازRasterUniqueValueColorizerکلاس می تواند نماد شناسی لایه شطرنجی را تغییر دهد. به عنوان مثالcolorRampویژگی میتواند یک رمپ رنگ متفاوت اعمال کند، اما این کنترل دقیق روی رنگهای خاص فراهم نمیکند. درعوض، به هر دسته کاربری، رنگ خاصی داده می شود.
قبل از کار با رنگ ها باید ویژگی فیلد مشخص شود. این فیلد توسط colorizer برای تعیین مجموعه منحصر به فرد مقادیر استفاده می شود. زمینه مورد علاقه LANDUSE نام دارد و به صورت زیر تنظیم می شود:
sym.colorizer.field = “LANDUSE”
گام بعدی به دلیل ماهیت نمادشناسی ارزش های منحصر به فرد برای شطرنجی دشوار است. درگروه هاویژگی رنگساز فهرستی ازگروه آیتماشیاء. یکگروه آیتمیک دسته از آیتم ها را نشان می دهد و به طور پیش فرض فقط یک مورد وجود داردگروه آیتم. درموارددارایی ازگروه آیتمکلاس لیستی ازRasterItems. هر یکRasterItemsشی نشان دهنده ارزش های منحصر به فرد مورد علاقه است. خصوصیاترنگوبرچسبمی تواند نمادشناسی هر مقدار منحصر به فرد را تغییر دهد. در کد زیر به کالای با برچسب Water رنگ جدیدی داده شده است:
برای گروه در sym.colorizer.groups:
برای مورد در group.items:
if item.label == “آب”:
item.color = {‘RGB’: [0, 0, 255, 100]}
مرحله بعدی این است که به هر مورد یک رنگ سفارشی اختصاص دهید، به شرح زیر:
if item.label == “Brush/transitional”:
item.color = {‘RGB’: [170، 255، 0، 100]}
if item.label == “زمین بایر”:
item.color = {‘RGB’: [170، 115، 0، 100]}
if item.label == “ساخته شده”:
item.color = {‘RGB’: [175، 175، 175، 100]}
if item.label == “کشاورزی”:
item.color = {‘RGB’: [225، 225، 0، 100]}
if item.label == “جنگل”:
item.color = {‘RGB’: [115، 175، 0، 100]}
if item.label == “تالاب ها”:
item.color = {‘RGB’: [0, 255, 185, 100]}
در نهایت، نماد شناسی جدید با استفاده از لایه اعمال می شودlyr.symbology = سیم، و پروژه برای اعمال تغییر ذخیره می شود.
lyr.symbology = سیم
aprx.saveACopy (“Rasters_Landuse.aprx”)
نتیجه همانطور که در شکل نشان داده شده است.
دومین رنگکننده برای اصلاح نمادشناسی لایههای شطرنجی استRasterClassifyColorizer. این رنگکننده مانند نماد رنگ مدرج برای لایههای ویژگی است. این کلاس شامل ویژگیهای فیلد طبقهبندی، تعداد کلاسها، روش طبقهبندی و سطح شیب رنگ است. نمونه های کد را می توان در صفحات راهنمای ArcGIS Pro یافت.
11.11کار با طرح بندی
برنامه نویسی نقشه همچنین می تواند برای کار با طرح بندی استفاده شود. یک پروژه واحد در ArcGIS Pro میتواند دارای چندین طرحبندی باشد. درArcGISProject.listLayouts()متد لیستی از طرحبندیها را در یک پروژه به دست میآورد. نحو کلی این روش است
ArcGISProject.listLayouts({wildcard})
این روش لیستی ازچیدماناشیایی که هر کدام به یک طرح تک صفحه ای ارجاع می دهند. تنها آرگومان متد یک علامت عام بر اساس نام طرح بندی برای فیلتر کردن نتایج است. درچیدمانشی دسترسی به ویژگی هایی مانند نام، اندازه صفحه و واحدهای صفحه طرح را فراهم می کند. به یک صفحهآرایی خاص ارجاع داده میشودنامویژگی. بنابراین، مهم است که هر طرح در یک پروژه یک نام منحصر به فرد داشته باشد. درچیدمانشی همچنین دسترسی به تمام عناصر طرح و همچنین چندین روش صادرات مختلف را فراهم می کند.
کد مثال زیر فهرستی از تمام طرحبندیهای یک پروژه را دریافت میکند و نام آنها را چاپ میکند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyts = aprx.listLayouts()
برای lyt در lyts:
چاپ (lyt.name)
del aprx
با استفاده از ترکیبی از نام و/یا یک فهرست، یک طرح بندی خاص به دست می آورید:
lyt = aprx.listLayouts(“پارک ها”)[0]
همانطور که در مثال های قبلی مشاهده شد، برای به دست آوردن شاخص صفر [0] مورد نیاز استچیدمانشی به جای لیست
یک چیدمان معمولی شامل چندین عنصر، از جمله نقشه ها، نمودارها، یک افسانه، متن، یک نوار مقیاس، یک فلش شمالی و موارد دیگر است. تعدادی از این عناصر دارای کلاس خاص خود هستندarcpy.mpماژول، که امکان دستکاری خصوصیات هر عنصر را فراهم می کند. ویژگیهای معمولی که میتوان تغییر داد شامل نام، اندازه و موقعیت است، در حالی که ویژگیهای دیگر با هر نوع عنصر متفاوت است. عناصر چیدمان را نمی توان با استفاده از اسکریپت ایجاد کرد، به جز برای شبیه سازی عناصر گرافیکی و متنی، بنابراین باید از قبل در یک پروژه وجود داشته باشند. شما می توانید تمام عناصر را در یک طرح بندی خاص با استفاده ازLayout.listElements()روش. نحو این روش است
Layout.listElements ({element_type}، {wildcard})
این روش شامل دو پارامتر اختیاری است. به طور پیش فرض،Layout.listElements()متد لیستی از همه عناصر را برمی گرداند، اما این لیست را می توان با استفاده از پارامتر نوع عنصر و یک علامت عام فیلتر کرد.
کد زیر تمام عناصر را برای یک طرح بندی مشخص می کند و نام و نوع آنها را چاپ می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyt = aprx.listLayouts(“پارک ها”)[0]
elems = lyt.listElements()
برای elem in elems:
print(elem.name + ” ” + elem.type)
del aprx
چاپ ممکن است به شکل زیر باشد:
افسانه LEGEND_ELEMENT
نوار مقیاس متناوب MAPSURROUND_ELEMENT
پیکان شمالی MAPSURROUND_ELEMENT
عنوان TEXT_ELEMENT
منطقه مطالعه MAPFRAME_ELEMENT
انواع عناصر خاصی که می توانند در اسکریپت نویسی استفاده شوند به شرح زیر فهرست شده اند. هر یک از این انواع عنصر مربوط به یک کلاس درarcpy.mpماژول به شرح زیر
- GRAPHIC_ELEMENT—برایGraphicElementاشیاء
- LEGEND_ELEMENT—برایLegendElementاشیاء
- MAPFRAME_ELEMENT—برایMapFrameاشیاء
- MAPSURROUND_ELEMENT—برایMapsurroundElementاشیاء
- PICTURE_ELEMENT—برایPictureElementاشیاء
- TEXT_ELEMENT—برایTextElementاشیاء
هر یک از این انواع عناصر دارای ویژگی های متفاوتی هستند، اما همه آنها دارای یک هستندنامویژگی. هنگام ایجاد یک عنصر در ArcGIS Pro، این ویژگی در کادر محاوره ای ویژگی های عنصر تنظیم می شود. به عناصر باید یک نام منحصر به فرد داده شود تا بتوان آن عنصر را به طور منحصر به فرد شناسایی کرد. همه انواع عناصر نیز دارای aنوعویژگی برای تعیین نوع عنصر
برخی از عناصر بخشی از یک عنصر گروهی هستند. گروه بندی برای عناصر متن رایج است. درLayout.listElements()متد عناصر موجود در یک عنصر گروه را به عنوان یک لیست مسطح برمی گرداند، بنابراین نیازی به پیمایش در ساختار عنصر گروه نیست. به عنوان مثال، اگر یک عنصر گروهی از سه عنصر تشکیل شده باشد، متد چهار عنصر را به عنوان یک لیست برمی گرداند: یکی برای خود عنصر گروه و یکی برای هر عنصر جداگانه.
همه عناصری که معمولاً در یک طرح بندی یافت می شوند، نوع عنصر خاص خود را ندارند. برای مثال، عناصری مانند میله های مقیاس و فلش های شمالی در زیر قرار می گیرندMapsurroundElementکلاس همه عناصر متن، صرف نظر از اینکه عنوان باشند یا یادداشت، در زیر قسمت قرار می گیرندTextElementکلاس باز هم، هیچ یک از این عناصر را نمی توان با استفاده از اسکریپت ایجاد کرد، و باید از قبل وجود داشته باشند تا بتوانید با آنها کار کنید.
هنگامی که مشخص شد کدام عناصر چیدمان در دسترس هستند، یک عنصر خاص با استفاده از موارد زیر ارجاع داده می شود: (1) شماره شاخص عنصر، (2)عنصر_نوعپارامتر، و/یا (3)wild_cardپارامتر. به عنوان مثال، برای کار با عنصر عنوان، می توان از سه مثال کد زیر استفاده کرد تا فقط شیء حاوی عنوان را بدست آورید.
با استفاده از شماره فهرست به طور مستقیم، با فرض قرار گرفتن عنوان در شاخص 3 در لیست عناصر، کد
title = lyt.listElements()[3]
با استفاده ازعنصر_نوعپارامتر، با فرض اینکه عنوان اولین یا تنها عنصر متنی باشد:
title = lyt.listElements(“TEXT_ELEMENT”)[0]
با استفاده ازwild_cardپارامتر، با فرض اینکه عنصر عنوان در واقع عنوان نامیده می شود، که ممکن است همیشه اینطور نباشد:
title = lyt.listElements(“”، “عنوان”)[0]
در موردعنصر_نوعوwild_cardپارامترها،Layout .listElements()متد لیستی را تنها با یک شی برمی گرداند. استفاده از شاخص صفر [0] در این لیست، شی را به جای فهرست برمی گرداند.
هنگامی که یک عنصر خاص ارجاع داده شد، می توان به ویژگی های مختلف دسترسی داشت. اکثر این ویژگی ها خواندن و نوشتن هستند، بنابراین می توان آنها را نیز تغییر داد. تنها خاصیتی که نمی توان آن را تغییر داد، این استنوعویژگی.
اگر نمی توانید اکثر عناصر طرح بندی را ایجاد یا حذف کنید، چه کاری می توانید با آنها انجام دهید؟ ابتدا می توانید اندازه یک عنصر را با استفاده از دکمه تغییر دهیدارتفاع عنصروعرض عنصرخواص این ویژگی ها هر دو در واحد صفحه هستند. ثانیاً، میتوانید محل قرارگیری عنصر را با تغییر دادن تغییر دهیدعنصر موقعیتXوعنصر موقعیتYخواص این ویژگی ها نیز در واحد صفحه هستند. چندین نوع عنصر نیز دارای یکچرخش عنصرویژگی کنترل زاویه چرخش عنصر بر حسب درجه. سوم،نامویژگی خواندن و نوشتن است، بنابراین می توانید نام را تغییر دهید. به خاطر داشته باشید که عناصر از قبل باید یک نام منحصر به فرد داشته باشند تا آنها را از هم متمایز کند. چهارم،قابل رویتاز ویژگی می توان برای تغییر دید یک عنصر استفاده کرد. این ویژگی یک Boolean است. در نهایت، انواع عناصر خاص دارای ویژگی های منحصر به فردی هستند که می توان آنها را تغییر داد. به عنوان مثالPictureElementکلاس یک داردمنبعتصویرویژگی، که از یک رشته متن تشکیل شده است که مسیر منبع داده را برای تصویر نشان می دهد. از آنجایی که این یک ویژگی خواندن و نوشتن است، میتوانید تصاویر را در طرحبندیهای خود با استفاده از یک اسکریپت بهروزرسانی کنید، همانطور که در مثال زیر نشان داده شده است:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyt = aprx.listLayouts(“پارک ها”)[0]
photo = lyt.listElements(“PICTURE_ELEMENT”)[0]
photo.sourceImage = “C:/Mapping/logo.png”
aprx.save()
del aprx
در این مثال، فرض این است که تنها یک واحد وجود داردPictureElementشی در طرح مورد علاقه اگر چندین عنصر از یک نوع وجود داشته باشد، می توان از پارامتر wildcard برای فیلتر کردن نتایج بر اساس نام استفاده کرد.
درTextElementشی تا حدودی منحصر به فرد است که دارای یک استمتندارایی قابل تغییر برای سایر عناصر، نمی توانید محتویات را تغییر دهید. برای مثال، نمیتوانید نوع نوار مقیاس یا ورودیهای یک افسانه را تغییر دهید. اما برای عناصر متنی، می توانید محتویات را تغییر دهید. مثال زیر نحوه به روز رسانی یک رشته متن خاص را نشان می دهد:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyt = aprx.listLayouts(“پارک ها”)[0]
title = lyt.listElements(“TEXT_ELEMENT”)[0]
title.text = “منطقه مطالعاتی جدید”
aprx.save()
del aprx
علاوه بر خود رشته متن، می توانید زاویه متن و اندازه متن را در نقاط به روز کنید. با این حال، بسیاری از ویژگی های دیگر متن با استفاده از آن قابل دسترسی نیستندarcpy.mpاز جمله فونت، سبک، رنگ و غیره.
11.12کار با نقشه ها، قاب های نقشه و دوربین ها
نقشه شی اصلی برای ارجاع و مدیریت لایه ها در ArcGIS Pro است. درarcpy.mpماژول شامل aنقشهکلاس، که مجموعه ای از لایه های داده های جغرافیایی جدولی و نمادین را نشان می دهد. در برنامه ArcGIS Pro، تنها راه برای تجسم محتویات یک نقشه، استفاده از نمای نقشه یا افزودن نقشه به صفحهآرایی با استفاده از قاب نقشه است. قاب های نقشه مانند ظروف برای نقشه ها در طرح صفحه هستند. استفاده از قاب های نقشه این امکان را فراهم می کند که نمایش نقشه در صفحه آرایی از هر نمای نقشه متمایز شود. به عنوان مثال، وسعت نقشه در داخل یک قاب نقشه منحصر به فرد و مستقل از هر نمای نقشه است. با این حال، مطالب مستقل نیستند. بنابراین، یک قاب نقشه درست مانند باز کردن نمای نقشه دیگری است، اما در یک طرحبندی صفحه.
نقشه ها در یک پروژه با استفاده ازArcGISProject.listMaps()روش. این روش لیستی ازنقشهاشیاء. قاب های نقشه در یک طرح با استفاده ازLayout.listElements()روش با فیلتر کردن MAPFRAME_ELEMENT به عنوان نوع عنصر. این روش لیستی ازMapFrameاشیاء. شما همچنین می توانید با استفاده از نقشه به نقشه دسترسی داشته باشیدنقشهدارایی aMapFrameهدف – شی. به عبارت دیگر، اگر ابتدا به aMapFrameشی در یک چیدمان، می توانید نقشه مرتبط را با پیدا کردن آن تعیین کنیدنقشهشیء نمایش داده شده در قاب نقشه دسترسی به نماهای نقشه با استفاده از آن ممکن نیستarcpy.mp. اگر چه وجود داردMapViewکلاس، این کلاس برای چاپ نقشه وب استفاده می شود و به نماهای نقشه ذخیره شده در یک پروژه مربوط نمی شود.
همانطور که بحث شد، قاب نقشه یک عنصر طرح بندی برای نمایش اطلاعات جغرافیایی در نقشه است. یک نقشه می تواند توسط بیش از یک فریم نقشه استفاده شود. هنگامی که یک قاب نقشه در یک اسکریپت ارجاع شد، می توانید با استفاده از این به نقشه مرتبط با آن دسترسی پیدا کنیدنقشهویژگی که امکان مدیریت لایه ها روی نقشه را فراهم می کند. علاوه بر این، شما می توانید تغییر دهیدنقشهشیئی که توسط یک قاب نقشه ارجاع داده می شود، به شما این امکان را می دهد که نقشه ها را تغییر دهید و در عین حال قاب نقشه را در طرح بندی حفظ کنید. این قابلیت شامل جابجایی بین نقشه های دو بعدی و سه بعدی است.
یکی دیگر از ویژگی های مهم و مرتبطMapFrameشیء استدوربینویژگی. این ویژگی دسترسی بهدوربینشی، که مکان و موقعیت مشاهده داده های نمایش داده شده در کادر نقشه را کنترل می کند. دردوربینموضوع ازarcpy.mpدسترسی به نمایشگرهای دو بعدی و سه بعدی را در یک قاب نقشه فراهم می کند. دردوربینشی مقادیر XYZ نما را کنترل می کند. برای نقشه های دوبعدی، مقادیر XY بر اساس مرکز قاب نقشه است، در حالی که مقدار Z پشتیبانی نمی شود. برای نقشه های سه بعدی، مقادیر XYZ موقعیت دوربین را نسبت به نما نشان می دهد. دردوربینشی همچنین شامل یک ویژگی مقیاس است که فقط برای نقشه های دو بعدی به دلیل نمای پلانیمتری آنها اعمال می شود. درحالتدارایی ازدوربینشی حالت بیننده را برمی گرداند که شامل GLOBAL یا LOCAL برای نقشه های سه بعدی و MAP برای نقشه های دو بعدی است. از آنجایی که هر دو نوع نمایشگر در دسترس هستند، برخی از ویژگی های دیگر نیاز به تفسیر دقیق دارند. به عنوان مثالگام صداویژگی یک نقشه دو بعدی دارای مقدار ثابت -90.0 است که به معنای نگاه مستقیم به پایین است.
وسعت یک قاب نقشه با استفاده از کنترل می شوددوربیندارایی ازMapFrameکلاس اگرچه وسعت یک ویژگی مستقیم نیستدوربینکلاس، یک ویژگی مشتق شده بر اساس استایکس،Y، ومقیاسخواص برای تسهیل کار با وسعت،دوربینکلاس شامل دو روش است:getExtent()برای به دست آوردن وسعت موجود یک قاب نقشه دو بعدی وsetExtent()برای تنظیم وسعت یک نقشه بر اساس یک موجودوسعتهدف – شی. یک کار رایج این است که وسعت چندین فریم نقشه یکسان باشد و از این روش ها می توان برای این کار استفاده کرد. مثال کد زیر وسعت یک قاب نقشه را می گیرد و همان وسعت را برای فریم نقشه دوم در همان طرح اعمال می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyt = aprx.listLayouts(“پارک ها”)[0]
mf1 = lyt.listElements(“MAPFRAME_ELEMENT”، “پارک A”)[0]
ext = mf1.camera.getExtent()
mf2 = lyt.listElements(“MAPFRAME_ELEMENT”، “پارک B”)[0]
mf2.camera.setExtent(ext)
aprx.save()
del aprx
درCamera.getExtent()روش an را برمی گرداندوسعتهدف – شی. وسعت یک مستطیل است که با مختصات گوشه پایین سمت چپ و گوشه بالا سمت راست در واحدهای نقشه مشخص می شود. در مثال،وسعتشی ازدوربینشی، اما راه های جایگزینی برای به دست آوردن یک وسعت وجود دارد. به عنوان مثال، می توانید با استفاده از عبارت، مقدار یک لایه را بدست آوریدMapFrame .getLayerExtent()روش. وسعت مجموعه داده های فضایی (شامل کلاس های ویژگی و رستر) را می توان با استفاده ازتوصیف کردن()وda.Describe()کارکرد. اجسام هندسی منفرد نیز دارای یکوسعتدارایی، که anوسعتهدف – شی.
11.13صادرات و چاپ طرح بندی
یکی از رایج ترین کارها برای استفاده خودکارarcpy.mpصادر کردن یک طرح به یک فایل است. صادرات یک طرح بندی را می توان با استفاده از روش های صادرات مرتبط با a انجام دادچیدمانهدف – شی. برای هر فرمت فایل روش متفاوتی وجود دارد که به شرح زیر است:
- exportToAIX()
- exportToBMP()
- exportToEMF()
- exportToEPS()
- exportToGIF()
- exportToJPEG()
- exportToPDF()
- exportToPNG()
- exportToSVG()
- exportToTGA()
- exportToTIFF()
این روش ها همه به روشی مشابه عمل می کنند. تنها آرگومان مورد نیاز برای متدهای صادرات، مسیر و نام فایل فایل خروجی است. همه روشها همچنین دارای یک آرگومان اختیاری برای وضوح فایل هستند، با پیشفرض ۹۶ نقطه در اینچ (dpi) برای اکثر انواع. هر روش دارای پارامترهای اضافی برای حالت رنگ، کیفیت تصویر و فشرده سازی است که بسته به فرمت فایل متفاوت است. این پارامترها با تنظیمات پنجرههای Export و Print در برنامه ArcGIS Pro مطابقت دارند.
به عنوان مثال، نحو ازexportToBMP()روش به شرح زیر است:
exportToBMP(out_bmp، {رزولوشن}، {bmp_color_mode}،
{bmp_image_compression}، {embed_color_profile}،
{clip_to_elements})
و نحو برایexportToJPEG()روش به شرح زیر است:
exportToJPEG(out_jpg، {رزولوشن}، {jpeg_color_mode}،
{jpeg_quality}، {embed_color_profile}،
{clip_to_elements})
این مثال ها تفاوت های کوچک در پارامترها را به دلیل تفاوت در ماهیت هر فرمت تصویر نشان می دهد. به عنوان مثال، حالت رنگ و فشرده سازی بین فرمت ها متفاوت است و بنابراین این پارامترها منحصر به فرد هستند.
پارامتر حالت رنگ برای JPEG را می توان روی مقیاس خاکستری 8 بیتی یا رنگ 24 بیتی (پیش فرض) تنظیم کرد و کیفیت تصویر JPEG مقداری بین 0 تا 100 (پیش فرض 80) برای کنترل میزان فشرده سازی است. فایلهای JPEG یک فرمت محبوب در وب هستند زیرا اندازه فایلها از بسیاری از فرمتهای دیگر کوچکتر است، اما الگوریتم از فشردهسازی با اتلاف استفاده میکند، به این معنی که برخی از دادهها از تصویر اصلی از بین میروند و عناصری مانند نقاشیها و متن میتوانند محو شوند. فرمت پیشنهادی بیشتر برای تصاویر نقشه PNG است:
exportToPNG(out_png، {رزولوشن}، {color_mode}،
{transparent_background}، {embed_color_profile}،
{clip_to_elements})
فایلهای PNG از عمق بیت بالایی پشتیبانی میکنند و از فشردهسازی بدون تلفات، بدون از دست دادن دادهها استفاده میکنند، که آن را برای حفظ کیفیت نمایش تصاویر نقشه بسیار مناسب میسازد. گزینه های حالت رنگ برای فایل های PNG شامل 8 بیت تطبیقی، 8 بیت مقیاس خاکستری، 24 بیت رنگ واقعی (پیش فرض) و 32 بیت با آلفا است. کد زیر یک طرح بندی واحد را به یک تصویر PNG صادر می کند:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyt = aprx.listLayouts(“پارک ها”)[0]
lyt.exportToPNG(“C:/Mapping/parks.png”)
از آنجا که تنها یک تصویر ایجاد می شود، کدگذاری سخت مسیر و نام فایل در اسکریپت به اندازه کافی آسان است. هنگام صادرات چند طرح، می توان از نام طرح برای تولید نام فایل خروجی استفاده کرد، به شرح زیر:
واردات کمان
aprx = arcpy.mp.ArcGISProject(“C:/Mapping/Demo.aprx”)
lyts = aprx.listLayouts()
برای lyt در lyts:
png_name = f”C:/Mapping/Images/{lyt.name}.png”
lyt.exportToPNG (png_name)
بر خلاف نقشهها، طرحبندیها در یک پروژه نمیتوانند نام یکسانی داشته باشند، که برای تشخیص آنها در یک اسکریپت لازم است.
PDF تبدیل به فرمتی پرکاربرد برای صادرات طرحبندی شده است، تا حدی به این دلیل که میتوان آن را در پلتفرمهای مختلف مشاهده و چاپ کرد. فایلهای پیدیاف را نیز میتوان در برنامههای کاربردی دیگر ویرایش کرد و بسیاری از اطلاعات را در یک طرحبندی حفظ کرد، از جمله اطلاعات ارجاع جغرافیایی، حاشیهنویسی و برچسبگذاری. روش صادرات برای PDF شامل چندین پارامتر اضافی به شرح زیر است:
exportToPDF(out_pdf، {رزولوشن}، {کیفیت_تصویر}،
{compress_vector_graphics}، {image_compression}،
{embed_fonts}، {layers_attributes}، {georef_info}،
{jpeg_compression_quality}، {clip_to_elements}،
{output_as_image}، {embed_color_profile})
وضوح پیش فرض 300 نقطه در اینچ است و نسبت کیفیت پیش فرض روی BEST تنظیم شده است. فشردهسازی تصویر بهطور پیشفرض روی ADAPTIVE تنظیم شده است که از JPEG برای تصاویر بزرگ با رنگهای منحصربهفرد و DEFLATE برای همه تصاویر دیگر استفاده میکند. همچنین پارامترهایی برای جاسازی فونت ها وجود دارد (پیش فرض این استدرست است، واقعی)، از جمله ویژگیهای ویژگی (پیشفرض LAYERS_ONLY است)، و امکان صادرات اطلاعات سیستم مختصات (پیشفرض استدرست است، واقعی).
از آنجا که اسناد PDF به طور گسترده ای برای صادرات طرح بندی استفاده می شود،arcpy.mpشامل الفPDF Documentکلاس برای مدیریت فایل های PDF، از جمله ادغام چندین فایل، حذف صفحات، و مدیریت تنظیمات امنیتی سند. درPDF Documentکلاس فقط یک ویژگی دارد:تعداد صفحات، که یک عدد صحیح برای تعداد صفحات است. درPDF Documentکلاس شش روش دارد:appendPages()،حذف صفحات()،insertPages()،ذخیره کن و ببند()،updateDocProperties()، وupdateDocSecurity().
دو تابع درarcpy.mpتسهیل کار با اسناد PDF درPDFDocumentOpen()تابع a را برمی گرداندPDF Documentبا اشاره به یک فایل PDF روی دیسک، شیء کنید، در حالی کهPDFDocumentCreate()تابع جدید ایجاد می کندPDF Documentشی در حافظه یک سناریوی معمولی با استفاده از این توابع، ایجاد یک کتاب نقشه در قالب PDF است. می توانید یک جدید (خالی) ایجاد کنیدPDF Documentدر حافظه با استفاده ازPDFDocumentCreate()تابع، و سپس با استفاده ازappendPages()یاinsertPages()روش هایPDF Documentهدف – شی.
کد زیر یک خالی ایجاد می کندPDF Documentبا استفاده ازPDFDocumentCreate()عملکرد و سه فایل PDF موجود را به این سند در حافظه اضافه می کند. درذخیره کن و ببند()متد PDF حاصل را به صورت زیر ذخیره می کند:
واردات کمان
pdfpath = “C:/Mapping/MapBook.pdf”
pdfdoc = arcpy.mp.PDFDocumentCreate(pdfpath)
pdfdoc.appendPages (“C:/Mapping/Cover.pdf”)
pdfdoc.appendPages (“C:/Mapping /Map1.pdf”)
pdfdoc.appendPages (“C:/Mapping /Map2.pdf”)
pdfdoc.saveAndClose()
del pdfdoc
توجه داشته باشید:درPDFDocumentCreate()تابع هیچ صفحه PDF خالی ایجاد نمی کند. در مثال، صفحات PDF واقعی از فایل های PDF موجود می آیند. با این حال، این صفحات همچنین می توانند در یک اسکریپت از یک پروژه با استفاده ازexportToPDF()روش.
11.14دسترسی به CIM با استفاده از پایتون
علاوه بر عملکردی که قبلاً مورد بحث قرار گرفت، می توانید با استفاده از پایتون به مدل اطلاعات نقشه برداری Esri (CIM) دسترسی پیدا کنید. CIM یک مشخصات فنی است که برای مستند کردن توصیفات نقشهبرداری مجموعه دادههای GIS استفاده میشود و برای نقشهها، صحنهها، طرحبندیها، لایهها، نمادها و سبکها کاربرد دارد. مشخصات با فرمت JSON نشان داده شده است که امکان مشاهده محتویات و ساختار آن را فراهم می کند. CIM به شما اجازه می دهد تا تغییرات خاص تری را انجام دهید که با استفاده از سایر عملکردها امکان پذیر نیستarcpy.mp. به عنوان مثال، می توانید تعریف CIM یک لایه را با استفاده ازLayer.getDefinition()روش، برخی از ویژگی های نماد شناسی را تغییر دهید و سپس آن تغییرات را با استفاده از عبارت روی لایه اعمال کنیدLayer.setDefinition()روش. ویژگی هایی که می توانید مستقیماً با استفاده از عملکرد آنها تغییر دهیدarcpy.mpمحدود به ویژگیهای نسبتاً ساده هستند، اما CIM دسترسی به تمام ویژگیهایی را که در برنامه ArcGIS Pro با آنها کار میکنید ممکن میسازد.
توضیح دقیقتری را میتوانید در مبحث “دسترسی Python CIM” در صفحات راهنمای ArcGIS Pro پیدا کنید. مشخصات CIM نیز در GitHub در میزبانی می شودhttps://github.com/esri/cim-spec.
11.15سایر قابلیت های arcpy.mp
چندین کار دیگر را می توان با استفاده از آن انجام دادarcpy.mpکه در اینجا به جزئیات پرداخته نشده است. این موارد شامل موارد زیر است:
- اعمال یک رندر مقادیر منحصر به فرد در یک لایه ویژگی
- مدیریت خواص برچسب گذاری یک لایه
- کار با نشانک ها
- به روز رسانی و اصلاح منابع داده
- چاپ نقشه وب
- کار با گزارشات
- ایجاد یک سری نقشه
هر یک از این موضوعات با جزئیات در صفحات راهنمای ArcGIS Pro مستند شده است.
نکاتی که باید به خاطر بسپارید
- درmpماژول امکان خودکارسازی وظایف نقشه برداری را فراهم می کند. چندین کلاس و توابع نقشه برداری خاص امکان دستکاری پروژه ها، نقشه ها، لایه ها، جداول و طرح بندی ها را فراهم می کنند.
- عملکرد ازmpماژول برخی از گردش های کاری معمولی را در ArcGIS Pro برای تولید خروجی نقشه برداری منعکس می کند. با این حال، برخی از وظایف بخشی از آن نیستندarcpy.mpمدول. به عنوان مثال، ایجاد یک پروژه جدید یا اضافه کردن یک طرح جدید به یک پروژه فقط با استفاده از ArcGIS Pro انجام می شود. استفاده كردنarcpy.mp، فقط می توانید پروژه ها، نقشه ها و طرح بندی های موجود را دستکاری کنید. درarcpy.mpماژول معمولاً برای خودکارسازی برخی از وظایف تکراری، مانند بهروزرسانی منابع داده برای بسیاری از لایههای یک نقشه، افزودن همان لایه به هر نقشه در یک پروژه، یا جایگزینی متن در چندین پروژه استفاده میشود.
- با ارجاع به یک فایل .aprx روی دیسک یا با فراخوانی پروژه ای که در حال حاضر باز است می توان به پروژه ها دسترسی داشت. خواص ازپروژه ArcGISکلاس را می توان خواند، تغییر داد و ذخیره کرد. اسناد نقشه قدیمی (فایل های mxd.) از ArcGIS Desktop 10.x را می توان با استفاده ازimportDocument()روش.
- نقشه های داخل یک پروژه را می توان با استفاده ازlistMaps()روش. خواص ازنقشهکلاس را می توان خواند، تغییر داد و ذخیره کرد.
- لایه های داخل نقشه را می توان با استفاده ازlistLayers()روش. خواص ازلایهکلاس را می توان خواند، تغییر داد و ذخیره کرد. درپشتیبانی می کند()روش ازلایهکلاس می تواند برای تعیین اینکه آیا یک لایه از یک ویژگی خاص پشتیبانی می کند یا خیر استفاده می شود. لایه ها در نقشه را می توان با استفاده از روش های دستکاری کردنقشهکلاس، شامل اضافه کردن نقشه پایه، افزودن داده از یک مسیر، افزودن یک لایه، جابجایی یک لایه، و حذف یک لایه.
- درنماد شناسیدارایی aلایهشی با برگرداندن a دسترسی به نماد شناسی یک لایه را فراهم می کندنمادشناسیهدف – شی. نماد شناسی یک لایه را می توان با تغییر رنگ دهنده (برای لایه های شطرنجی) یا رندر (برای لایه های ویژگی) دستکاری کرد. ویژگی های قابل تغییر عبارتند از نوع نماد، رنگ، اندازه و موارد دیگر. نمادشناسی را نیز می توان با اعمال سبکی از گالری نمادشناسی دستکاری کرد.
- برنامه نویسی نقشه همچنین می تواند برای کار با طرح بندی استفاده شود. یک پروژه واحد در ArcGIS Pro میتواند دارای چندین طرحبندی باشد. درlistLayouts()متد لیستی از طرحبندیها را در یک پروژه به دست میآورد. درچیدمانشی دسترسی به ویژگی های اساسی مانند نام، اندازه صفحه، و واحدهای صفحه طرح، و همچنین تمام عناصر طرح و چندین روش مختلف صادرات را فراهم می کند.
- با استفاده ازlistElements()روش. عناصر فردی را می توان تغییر داد، اما این تغییرات معمولاً محدود به تغییر اندازه و مکان است. به جز متن و تصاویر، محتویات واقعی عناصر طرح بندی را نمی توان با استفاده از اسکریپت تغییر داد.
- هنگامی که یک نقشه به یک طرح اضافه می شود، یک قاب نقشه ایجاد می شود. درMapFrameشی به شما امکان دسترسی به نقشه مرتبط با آن و همچنین به a را می دهددوربینشی، که مکان و موقعیت مشاهده داده های نمایش داده شده در یک قاب نقشه را کنترل می کند.
- طرحبندیها را میتوان به فرمتهای مختلف از جمله JPEG، PDF و PNG صادر کرد.
- شما می توانید با استفاده از پایتون به مدل اطلاعات نقشه برداری دسترسی داشته باشید و به شما امکان دسترسی دقیق به تنظیمات نقشه برداری را می دهد.
شرایط کلیدی
- آلفا
- رنگ دهنده
- حالت رنگ
- مدل رنگ
- طرح رنگی
- فشرده سازی
- چارچوب داده
- وسعت
- لایه
- چیدمان
- فشرده سازی بدون تلفات
- فشرده سازی با اتلاف
- نقشه
- سند نقشه
- قاب نقشه
- نمای نقشه
- کدورت
- پروژه
- ارائه دهنده
- مقیاس
- نماد شناسی
- قالب
سوالات را مرور کنید
- نحوه تعیین محتویات یک پروژه در ArcGIS Pro (فایل aprx.)، از جمله نقشه ها، لایه ها و طرح بندی ها را شرح دهید.
- ویژگی های کدام لایه را می توان مستقیماً با استفاده ازmpمدول؟
- مراحل مربوط به ارجاع یک لایه در یک نقشه و افزودن آن به نقشه دیگر در همان پروژه را در ArcGIS Pro شرح دهید.
- تفاوت بین را توضیح دهیدلایهوLayerFileاشیاء.
- کدام رنگکنندهها و رندرها به ترتیب برای اصلاح نمادشناسی لایههای شطرنجی و لایههای ویژگی موجود هستند؟
- مراحل تغییر نمادشناسی یک لایه ویژگی از نمادشناسی پیش فرض به استفاده از یک رنگ یا نماد خاص را شرح دهید.
- توضیح دهید که چگونهدوربینکلاس برای کنترل وسعت یک قاب نقشه استفاده می شود.
- برخی از وظایف رایج در ArcGIS Pro برای کار با پروژهها، نقشهها و طرحبندیهایی که با استفاده از ماژول arcpy.mp قابل انجام نیستند چیست؟
بدون دیدگاه