آموزش برنامه نویسی GIS با پایتون (2)

کار با  داده های رستری در پایتون -فصل 10

10.1معرفی

رسترها نوع منحصر به فردی از داده های فضایی را ارائه می دهند و بسیاری از ابزارهای ژئوپردازش به طور خاص برای استفاده از ساختار داده های شطرنجی طراحی شده اند. ArcPy شاملarcpy.sa(تحلیلگر فضایی) وarcpy.iaماژول های (Image Analyst) که دسترسی به بسیاری از ابزارهای پردازش جغرافیایی را برای کار با تصاویر و داده های شطرنجی فراهم می کند. این فصل نحوه استفاده از ArcPy را برای کار با اشیاء شطرنجی، فهرست‌بندی و توصیف رسترها، و انجام تجزیه و تحلیل و پردازش داده‌های شطرنجی نشان می‌دهد. ArcPy همچنین جبر نقشه را در محیط پایتون ادغام می کند. توابع و کلاس های اضافی ازarcpy.saوarcpy.iaماژول ها نیز پوشش داده شده اند، از جمله کلاس های خاص برای پشتیبانی از پارامترهای ابزار، Raster Cell Iterator برای تکرار روی سلول های جداگانه، و توابعی برای تکرار قابلیت های توابع شطرنجی.

آموزش برنامه نویسی GIS با پایتون

10.2درک داده های شطرنجی

در مدل داده های شطرنجی، سطح زمین به صورت شبکه ای از سلول های هم اندازه نمایش داده می شود که پیکسل نیز نامیده می شود. هر سلول نشان دهنده یک بخش کوچک از زمین است. ویژگی های سلول چیزی در مورد آن قسمت از زمین به ما می گوید.

اصطلاحات تصویرسازی و شطرنجی اغلب به جای یکدیگر استفاده می شوند، اما یکسان نیستند. یک تصویر یک نمایش تصویری دو بعدی است – برای مثال، یک عکس هوایی یا تصویر ماهواره ای. رستر مدل داده ای است که برای ذخیره اطلاعات در قالب سلول ها استفاده می شود. در GIS، تصاویر به صورت مجموعه داده های شطرنجی ذخیره می شوند. مجموعه داده شطرنجی یک مدل داده مکانی شطرنجی است که بر روی دیسک یا در یک پایگاه داده جغرافیایی ذخیره می شود. با این حال، بسیاری از مجموعه داده‌های شطرنجی تصویر را نشان نمی‌دهند – به عنوان مثال، نموداری از داده‌های ارتفاعی یا مقادیر بارندگی. در واقع، همه تصاویر شطرنجی هستند، اما همه شطرنجی ها تصویر نیستند. بسیاری از ابزارهایی که روی تصاویر کار می کنند، روی انواع دیگر رسترها نیز کار می کنند، بنابراین تمایز همیشه برای یادگیری نحوه انجام پردازش و تجزیه و تحلیل مجموعه داده های شطرنجی حیاتی نیست.

برخی از شطرنج‌ها فقط یک قطعه از اطلاعات یک سلول را ذخیره می‌کنند – برای مثال، یک شطرنجی ارتفاع ممکن است مقدار ارتفاع را فقط بر حسب متر ذخیره کند. این اطلاعات را می توان در یک باند شطرنجی ذخیره کرد که نشان دهنده یک لایه در مجموعه داده شطرنجی است. دیگر شطرنجی‌ها اطلاعات متعددی را در مورد یک سلول ذخیره می‌کنند – برای مثال، یک تصویر ماهواره‌ای ممکن است اطلاعاتی را در طول موج‌های مختلف ثبت کند. این اطلاعات به چندین باند نیاز دارد.

در یک مجموعه داده شطرنجی، هر سلول حاوی اطلاعات ویژگی برای آن مکان است. به طور معمول، ویژگی با در نظر گرفتن مقدار متوسط ​​کل فضایی که هر سلول اشغال می کند تعیین می شود. به عنوان مثال، اگر یک تصویر لندست دارای اندازه سلول 30 متر باشد، هر سلول مربوط به مساحت 30 در 30 متر روی زمین است. ویژگی های ثبت شده برای یک سلول معین (مثلاً مقادیر بازتاب) نشان دهنده مقدار متوسط ​​برای آن منطقه 30 در 30 متر است. بنابراین شطرنج‌هایی با سلول‌های کوچک، که ناحیه کوچک‌تری روی زمین را پوشش می‌دهند، جزئیات بیشتری را ارائه می‌کنند. اندازه سلول شطرنجی به عنوان وضوح فضایی شطرنجی نیز شناخته می شود. اندازه سلول کوچک به معنای جزئیات بیشتر است، که به معنای وضوح فضایی بالاتر است. انواع دیگر وضوح عبارتند از وضوح طیفی (تعداد باندها)، وضوح زمانی (فرکانس)،

بر اساس آنچه که داده ها نشان می دهند، چندین نوع داده شطرنجی مختلف وجود دارد. آنها شامل شطرنجی های پیوسته، برای پدیده هایی مانند ارتفاع یا بارندگی هستند. رسترهای گسسته، برای پدیده هایی مانند کاربری زمین و خاک. و تصاویری که با استفاده از هواپیماها، پهپادها و ماهواره ها به دست آمده است. تصویرسازی شکل خاصی از شطرنجی پیوسته است زیرا مقادیر سلولی معمولاً مقادیر بازتاب را در مقیاس پیوسته ذخیره می کنند.

مجموعه داده های شطرنجی را می توان در چندین فرمت ذخیره کرد، از جمله فرمت های مستقل مانند TIFF (پسوند فایل.tif) و Esri GRID (بدون پسوند فایل). مجموعه داده های شطرنجی نیز می توانند در یک پایگاه داده جغرافیایی ذخیره شوند. مجموعه داده شطرنجی هر قالب شطرنجی معتبری است که در یک یا چند باند سازماندهی شده است. مجموعه داده های شطرنجی متعددی را می توان با هم ضمیمه کرد تا یک مجموعه داده موزاییکی برای یک منطقه بزرگتر ایجاد کند. مجموعه داده موزاییک مجموعه ای از مجموعه داده های شطرنجی است که در یک کاتالوگ ذخیره می شود.

ArcGIS Pro دارای ویژگی های بسیاری برای مدیریت، تجزیه و تحلیل، تجسم و به اشتراک گذاری داده های شطرنجی است. روش های مختلفی برای استفاده از این ویژگی ها در اسکریپت نویسی پایتون با استفاده از ArcPy وجود دارد. این رویکردها شامل موارد زیر است:

  • بسیاری از وظایف مدیریت داده برای شطرنجی و تصاویر را می توان با استفاده از توابع ArcPy انجام داد. به عنوان مثال، جعبه ابزار مدیریت داده در ArcGIS Pro شامل یک مجموعه ابزار رستر با چندین ده ابزار ژئوپردازش جغرافیایی برای دستکاری اساسی داده های شطرنجی، از جمله پردازش مجموعه داده های شطرنجی، کار با موزاییک ها، و مدیریت ویژگی های مجموعه داده های شطرنجی است. چندین ابزار دیگر برای داده های شطرنجی را می توان در جعبه ابزار و مجموعه ابزارهای دیگر یافت – به عنوان مثال، برای تبدیل داده ها بین شطرنجی و سایر قالب ها برای پیش بینی ها.
  • پسوندهای Spatial Analyst و Image Analyst ArcGIS Pro شامل بسیاری دیگر از ابزارهای geoprocessing تخصصی برای کار با تصاویر و داده های شطرنجی است. اکثر این ابزارها به عنوان توابع در دسترس هستندsaوarcpy.iaماژول ها به ترتیب
  • توابع اضافی ازsaوarcpy.iaعملکرد موجود در توابع شطرنجی در ArcGIS Pro را تکرار کنید. توابع شطرنجی شامل قابلیت هایی هستند که در ابزارهای پردازش جغرافیایی یافت نمی شوند.
  • مجموعه داده های رستر را می توان به آرایه NumPy تبدیل کرد تا در سایر بسته های پایتون استفاده شود.

بخش های بعدی این قابلیت ها را بررسی می کنند.

10.3با استفاده از ماژول های Spatial Analyst و Image Analyst

ArcGIS Pro شامل دو افزونه برای کار با تصاویر و داده های شطرنجی است: Spatial Analyst و Image Analyst. عملکرد این افزونه ها در ArcPy با استفاده ازarcpy .saوarcpy.iaماژول ها به ترتیب عملکرد ارائه شده توسط این ماژول ها تا حد زیادی مشابه ابزارهای موجود در جعبه ابزار مربوطه است. به عنوان مثال، شما می توانید استفاده کنیدarcpy .saماژول برای اجرای ابزار Slope. علاوه بر اینarcpy.saوarcpy.iaماژول ها جبر نقشه را مستقیماً در محیط پایتون ادغام می کنند. جبر نقشه زبانی است که نحوی را برای ترکیب لایه های شطرنجی با اعمال عملگرها برای ایجاد لایه های شطرنجی جدید تعریف می کند. این دو ماژول از عملگرهای جبر نقشه پشتیبانی می کنند. این عملگرها همان عملگرهایی هستند که در ابزارهای پردازش جغرافیایی مانند ماشین حساب رستر استفاده می شوند – به عنوان مثال، جمع (+)، ضرب (*، و بولی و (&).

عملکرد ماژول های Spatial Analyst و Image Analyst بطور قابل ملاحظه ای همپوشانی دارند. ابزارهایی که برای هر دو ماژول مشترک هستند شامل ابزارهایی برای جبر نقشه، پوشش، طبقه بندی تصویر و تجزیه و تحلیل آماری هستند. ابزارهایی که برای تحلیلگر فضایی منحصر به فرد هستند شامل بسیاری از ابزارهای تجزیه و تحلیل شطرنجی عمومی (به عنوان مثال ابزارهایی برای تجزیه و تحلیل فاصله، درونیابی، طبقه بندی مجدد، و چندین ابزار دیگر) و همچنین ابزارهای خاص حوزه (به عنوان مثال، ابزارهایی برای آب های زیرزمینی، هیدرولوژی، و تشعشعات خورشیدی هستند. ). ابزارهایی که منحصر به فرد تحلیلگر تصویر هستند شامل ابزارهای تخصصی برای یادگیری عمیق و تجزیه و تحلیل تصاویر متحرک هستند. همه این ابزارها از طریق ArcPy در دسترس هستندarcpy.saوarcpy.iaماژول ها

ترکیب این دو ماژول دسترسی به بسیاری از ابزارهای ژئوپردازش شطرنجی را فراهم می کند. کد زیر را که ابزار Slope را اجرا می کند در نظر بگیرید:

واردات کمان

elev = arcpy.Raster(“C:/Raster/elevation”)

outraster = arcpy.sa.Slope(elev)

کد مثال یک شی شطرنجی را با استفاده ازشطرنجیکلاس؛ بخش بعدی این موضوع را با جزئیات بیشتری مورد بحث قرار می دهد. توجه داشته باشید که ابزار Slope استفاده نامیده می شودarcpy.sa.Slope، که به نظر می رسد از نحو معمولی استفاده شده برای همه ابزارها پیروی می کند:arcpy.<toolboxalias>.<Toolname>. با این حال، جایگزینarcpy.<toolname>_<toolboxalias>نحو در اینجا اعمال نمی شود، وکمانی .Slope_saمعتبر نیست. زیراsaیک ماژول است و نه فقط نام مستعار جعبه ابزار، کد را می توان به صورت زیر ساده کرد:

واردات کمان

از واردات arcpy.sa *

elev = arcpy.Raster(“C:/Raster/elevation”)

outraster = شیب (elev)

صورتحساباز واردات arcpy.sa *همه توابع را ازarcpy.saماژول و ابزارها را می توان مستقیماً فراخوانی کرد – برای مثال،شیبدر مقابلarcpy.sa.Slope. در ابتدا، این ممکن است صرفه جویی زیادی به نظر نرسد، اما تصور کنید که چندین عملکرد در یک اسکریپت وجود داشته باشد – حذف شده است.arcpy.saچندین ده بار کد شما را کوتاه تر و خواندن آسان تر می کند.

Spatial Analyst و Image Analyst مانند سایر برنامه های افزودنی نیاز به مجوز دارند. فصل 5 به تفصیل مجوز را پوشش می دهد. رایج ترین نوع مجوز در ArcGIS Pro مجوز نام کاربری است. با این نوع لایسنس، لایسنس افزونه ها توسط حساب کاربری تنظیم می شود. قبل از اجرای ابزاری باید بررسی کنید که آیا مجوز Spatial Analyst یا Image Analyst موجود است یا خیرarcpy.saیاarcpy.ia.

یک اسکریپت معمولی این کار را به صورت زیر انجام می دهد:

واردات کمان

arcpy.env.workspace = “C:/Raster”

if arcpy.CheckExtension(“Spatial”) == “Available”:

چاپ (“مجوز تحلیل فضایی موجود است.”)

<جبر نقشه یا ابزارهای پردازش جغرافیایی>

چاپ (“پردازش کامل شد.”)

دیگر:

print (“مجوز تحلیل فضایی در دسترس نیست.”)

برای مجوزهای استفاده همزمان، می‌توانید مجوزی برای برنامه‌های افزودنی از داخل اسکریپت با استفاده ازCheckOutExtension()عملکرد. فصل 5 نمونه های کد را ارائه می دهد.

به دلیل همپوشانی بین دو افزونه، ابزارهای زیادی از طریق هر دو در دسترس هستندarcpy.saوarcpy.iaماژول ها این همپوشانی همچنین بر نحوه استفاده از مجوزها تأثیر می گذارد. مثالی از ابزار Con را در نظر بگیرید که با مجوز Spatial Analyst یا Image Analyst در دسترس است. اسکریپت زیر از ابزار Con استفاده می کندarcpy.iaمدول:

واردات کمان

از واردات arcpy.ia *

arcpy.env.workspace = “C:/Raster/Study.gdb”

inras = رستر (“ارتفاع”)

کجا = “VALUE >= 1500”

outras = Con(inras, 1, 0, where)

outras.save (“outcon”)

سناریویی را در نظر بگیرید که در زمان اجرا، هیچ مجوزی برای Image Analyst در دسترس نیست، اما مجوزی برای Spatial Analyst در دسترس است. اسکریپت با موفقیت کامل شد زیرا حداقل یکی از مجوزهای لازم در دسترس است. یعنی برای ابزارهای موجود در هر دوarcpy.saوarcpy.ia، نیازی به نگرانی در مورد اینکه کدام ماژول در اسکریپت های خود استفاده کنید وجود ندارد. با این حال، فقط تعداد انگشت شماری ابزار در دسترس هستندarcpy.iaکه در دسترس نیستندarcpy.sa، وarcpy.saبیشترین تعداد ابزار را شامل می شود. بنابراین، اکثر اسکریپت هایی که از ابزارهای مشترک برای هر دو ماژول استفاده می کنند، باید از آن استفاده کنندarcpy.saمدول.

10.4کار با اشیاء شطرنجی

ArcPy شامل یکشطرنجیکلاسی که به یک مجموعه داده شطرنجی ارجاع می دهد. یک شی شطرنجی را می توان به سه روش ایجاد کرد: (1) با ارجاع به یک رستر موجود روی دیسک، (2) با اجرای یک ابزار پردازش جغرافیایی، یا (3) با استفاده از یک دستور جبر نقشه. اشیاء شطرنجی هنگام کار با مجموعه داده های شطرنجی در اسکریپت نویسی پایتون مهم هستند زیرا به طور گسترده به عنوان ورودی و خروجی ابزارهای پردازش جغرافیایی استفاده می شوند.

نحو برای شی شطرنجی است

Raster(inRaster، {is_multidimensional})

درinRasterپارامتر مجموعه داده شطرنجی ورودی یا لیست مجموعه داده های شطرنجی است. شما همچنین می توانید از a استفاده کنیدRasterInfoشی به عنوان ورودی، که مجموعه ای از ویژگی های شطرنجی را توصیف می کند. این رویکرد اخیر برای ایجاد یک مجموعه داده شطرنجی جدید از یک مجموعه موجود در حالی که برخی از ویژگی های آن را اصلاح می کند مفید است. درچند بعدی استپارامتر یک Boolean برای نشان دادن چند بعدی بودن ورودی است. پیش فرض استنادرست. داده های چند بعدی نشان دهنده داده های گرفته شده در زمان های مختلف و اعماق یا ارتفاعات مختلف است که برای داده های جوی و اقیانوس شناسی رایج است. فرمت های رایج برای داده های چند بعدی netCDF و HDF هستند. با این حال، مجموعه داده‌های رستری متشکل از باندهای متعدد، چند بعدی در نظر گرفته نمی‌شوند.

کد زیر نحوه ایجاد یک شی شطرنجی را با ارجاع به یک رستر روی دیسک نشان می دهد:

واردات کمان

arcpy.env.workspace = “C:/Raster”

myraster = arcpy.Raster (“ارتفاع”)

درشطرنجیکلاس یک کلاس معمولی از ArcPy است، نه از آنarcpy.saیاarcpy.iaمدول. در نتیجه، کد مثال قبلی نیازی به استفاده از یکی از این ماژول ها ندارد.

بسیاری از ابزارهای geoprocessing یک شی شطرنجی را به شرح زیر برمی گرداند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster”

outraster = شیب (“ارتفاع”)

به دلیل استفاده از ابزار Slope، استفاده از آن ضروری استarcpy.saمدول. در هر دو مورد، شی شطرنجی به دست آمده را می توان در عبارات پایتون، ابزارهای پردازش جغرافیایی اضافی و عبارات جبر نقشه استفاده کرد.

اشیاء شطرنجی دارای خواص زیادی هستند، از جملهتعداد باند،نوع فشرده سازی،قالب،ارتفاع،عرض،pixelType،مرجع فضایی، و خیلی های دیگر. این ویژگی ها عمدتا فقط خواندنی هستند. همین خواص را نیز می توان با استفاده ازتوصیف کردن()وda.Describe()توابع، که بخش 10.5 با جزئیات بیشتری توضیح می دهد. به طور کلی، بهترین روش برای دسترسی به ویژگی های یک مجموعه داده شطرنجی با استفاده از شی شطرنجی، اما با استفاده از آن استتوصیف کردن()وda.Describe()توابع نیز معتبر است و گاهی اوقات مورد نیاز است.

مثال زیر نحوه دسترسی به این ویژگی ها را نشان می دهد. این اسکریپت یک شی شطرنجی را با ارجاع به مجموعه داده های شطرنجی روی دیسک ایجاد می کند و ویژگی های انتخاب شده را به شرح زیر چاپ می کند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster/Study.gdb”

ras = شطرنجی (“ارتفاع”)

print(ras.catalogPath)

print(ras.compressionType)

چاپ (ras.format)

چاپ (ras.pixelType)

print(ras.spatialReference.name)

اکثر خصوصیات یک رشته یا مقدار عددی را برمی‌گردانند که می‌تواند مستقیماً چاپ شود. درمرجع فضاییاموال برمی گردد الفمرجع فضاییجسم، که به نوبه خود دارای خواص بسیاری است. درنامدارایی ازمرجع فضاییشی برای مصور در اینجا چاپ شده است.

برای این مجموعه داده شطرنجی، نتیجه به شرح زیر است:

C:\Raster\Study.gdb\elevation

LZ77

FGDBR

S16

NAD_1983_Transverse_Mercator

اشیاء شطرنجی که چند بعدی نیستند فقط یک روش دارند:صرفه جویی(). شی شطرنجی (متغیر و مجموعه داده مرتبط) که از یک ابزار پردازش جغرافیایی یا عبارت جبر نقشه بازگردانده می شود به طور پیش فرض موقت است. زمانی که متغیر از محدوده خارج می شود، متغیر و مجموعه داده حذف می شوند – به عنوان مثال، زمانی که ArcGIS Pro بسته می شود یا زمانی که یک اسکریپت مستقل بسته می شود. درصرفه جویی()روش را می توان برای دائمی کردن شی شطرنجی استفاده کرد. نحو ازصرفه جویی()روش است

Raster.save ({name})

بر اساس مثال‌های قبلی، شی شطرنجی که توسط ابزار Slope برگردانده می‌شود، موقتی است، اما می‌توان با استفاده از کد زیر آن را دائمی کرد:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster”

outraster = شیب (“ارتفاع”)

outraster.save (“شیب”)

ممکن است غیر منطقی به نظر برسد که عملیات geoprocessing و عبارات جبر نقشه منجر به خروجی‌های موقت می‌شود و شما نیاز به یک مرحله جداگانه برای ذخیره نتیجه دارید. به طور معمول، شما می خواهید نتیجه نهایی یک فایل روی دیسک باشد. به خاطر داشته باشید که یک گردش کار معمولی با استفاده از رسترها اغلب شامل مراحل متعددی است. اگر تنها به خروجی نهایی نیاز است، استفاده از خروجی های موقت برای مراحل میانی منجر به فایل های خروجی کمتر و نیازهای ذخیره سازی کمتر می شود.

اشیاء شطرنجی چند بعدی دارای روش های اضافی برای به دست آوردن ویژگی ها، نام ها و مقادیر داده های چند بعدی هستند.

10.5توصیف خواص شطرنجی

رسترها را می توان با استفاده ازتوصیف کردن()وda.Describe()کارکرد. فصل 6 این توابع را مورد بحث قرار می دهد. هر دو تابع ویژگی های یک عنصر داده مشخص شده را برمی گرداند. این ویژگی ها پویا هستند، به این معنی که به نوع داده ای که توضیح داده می شود بستگی دارند. به عنوان مثال، زمانی کهتوصیف کردن()تابع در شطرنجی استفاده می شود، مجموعه ای از ویژگی های عمومی علاوه بر ویژگی هایی که برای عنصر شطرنجی خاص منحصر به فرد هستند، برگردانده می شود.

به عنوان یادآوری، این دو عملکرد به شما امکان دسترسی به اطلاعات یکسان اما به روشی کمی متفاوت را می دهند. درتوصیف کردن()تابع اطلاعات را به عنوان ویژگی های برمی گرداندتوصیف کردنشی، در حالی کهda.Decribe()تابع اطلاعات را به عنوان فرهنگ لغت برمی گرداند که در آن کلیدها با ویژگی ها مطابقت دارند. اگرچه این تفاوت بر نحو تأثیر می گذارد، عملکرد کلی هر دو تابع یکسان است.

در بخش قبل بحث شد که چگونه می توان به ویژگی های مجموعه داده های شطرنجی با استفاده از اشیاء شطرنجی دسترسی پیدا کرد، و همپوشانی قابل توجهی بین این ویژگی ها و عملکردتوصیف کردن()وda.Describe()کارکرد. با این حال، در برخی از سناریوها، استفاده از این دو تابع به جای کار با اشیاء شطرنجی راحت‌تر است. این شامل کار با باندهای شطرنجی است، برخلاف کار با مجموعه داده های شطرنجی. بنابراین، تمایز واضح بین این دو عنصر داده شطرنجی مهم ضروری است:

  • مجموعه داده شطرنجی – مجموعه داده شطرنجی یک مدل داده فضایی شطرنجی است که بر روی دیسک یا در یک پایگاه داده جغرافیایی ذخیره می شود. مجموعه داده های شطرنجی را می توان در فرمت های بسیاری از جمله TIFF، JPEG، IMAGINE، Esri GRID و MrSID ذخیره کرد. مجموعه داده های شطرنجی می توانند تک باند یا چند باند باشند.
  • باند شطرنجی – یک باند شطرنجی یک لایه در مجموعه داده شطرنجی است که مقادیر داده را برای یک محدوده خاص در طیف الکترومغناطیسی یا سایر مقادیر بدست آمده از دستکاری باندهای تصویر اصلی را نشان می دهد. به عنوان مثال، بسیاری از انواع تصاویر ماهواره ای دارای باندهای متعدد هستند.

خواص هر یک از این عناصر متفاوت است. به عنوان مثال، قالب (TIFF، JPEG، و دیگران) یک ویژگی از مجموعه داده شطرنجی است در حالی که اندازه سلول یک ویژگی از باند شطرنجی است. به طور کلینوع دادهاز ویژگی می توان برای تعیین نوع عنصر داده استفاده کرد. با این حال، همه خواص با استفاده از همان قابل دسترسی هستندتوصیف کردن()وda.Describe()کارکرد.

توجه داشته باشید:درنوع دادهویژگی یک ویژگی شی شطرنجی نیست و فقط با استفاده از آن می توان به آن دسترسی داشتتوصیف کردن()وda.Describe(). هنگام کار با اشیاء شطرنجی، فرض ضمنی این است که نوع عنصر داده از قبل شناخته شده است، و بنابراین این ویژگی مورد نیاز نیست. با این حالتعداد باندویژگی شی شطرنجی را می توان برای تعیین اینکه آیا مجموعه داده شطرنجی تک باند یا چند باند است استفاده کرد.

کد زیر استفاده از را نشان می دهدتوصیف کردن()تابع، که یک شی را با ویژگی های قابل دسترسی برمی گرداند:

واردات کمان

arcpy.env.workspace = “C:/Raster”

رستر = “landcover.tif”

desc = arcpy.Describe(raster)

print(desc.dataType)

برای این مثال از یک رستر در قالب TIFF،نوع دادهخاصیت نوع را برمی گرداندRasterDataset. همین اطلاعات را می توان با استفاده ازda.Describe()، اما تابع یک فرهنگ لغت را برمی گرداند. در این فرهنگ لغت،نوع دادهکلید است، وRasterDatasetمقدار مربوطه است:

desc = arcpy.da.Describe(raster)

چاپ (صفحه [“داده نوع”])

اگرچه می توان از هر دو عملکرد برای به دست آوردن اطلاعات یکسان استفاده کرد، بقیه این فصل از آن استفاده می کندda.Describe()زیرا فرهنگ لغت چندین مزیت را ارائه می دهد.

ویژگی هایی که فقط مختص مجموعه داده های شطرنجی هستند شامل موارد زیر است:

  • تعداد باند-تعداد باندها در مجموعه داده شطرنجی
  • نوع فشرده سازی- نوع فشرده سازی (LZ77، JPEG، JPEG2000، یا هیچ)، که در آن فشرده سازی حجم فایل روی دیسک را کاهش می دهد.
  • قالب- فرمت شطرنجی (GRID، IMAGINE، TIFF و موارد دیگر)
  • دائمی- حالت دائمی شطرنجی را نشان می دهد:نادرستاگر شطرنجی موقت است،درست است، واقعیاگر شطرنجی دائمی باشد
  • نوع حسگر– نوع حسگر مورد استفاده برای گرفتن تصویر

توجه داشته باشید:سه مورد اول از این خواص نیز از ویژگی هایشطرنجیکلاس با این حال،نوع حسگرمتعلق به نیستشطرنجیکلاس، وموقت استدارایی ازشطرنجیبه جای کلاس از کلاس استفاده می شوددائمیویژگی.

هنگامی که مشخص شد که یک عنصر یک مجموعه داده شطرنجی است، می توان به این ویژگی ها دسترسی داشت. به عنوان مثال، کد زیر شامل چندین ویژگی است که برای توصیف فایل TIFF استفاده می شود:

واردات کمان

از arcpy import env

env.workspace = “C:/Raster”

رستر = “landcover.tif”

desc = arcpy.da.Describe(raster)

چاپ (صفحه [“داده نوع”])

چاپ (نزولی [“bandCount”])

چاپ (درس [“نوع فشرده سازی”])

این فایل .tif یک TIFF غیرفشرده تک باندی است و در نتیجه ویژگی آن استتعداد باندمقداری از1،ونوع فشرده سازیمقداری ازهیچ یک. تمام این ویژگی ها را می توان با استفاده از یک شی شطرنجی نیز تعیین کرد.

بسیاری از خصوصیات دیگر که معمولاً با رسترها مرتبط هستند، فقط برای باندهای شطرنجی منفرد قابل دسترسی هستند. به عنوان مثال، وضوح سلول یک ویژگی شطرنجی مهم است، اما باندهای منفرد در یک مجموعه داده شطرنجی می توانند وضوح متفاوتی داشته باشند. چندین ویژگی خاص باندهای شطرنجی است، از جمله موارد زیر:

  • ارتفاع- تعداد ردیف ها
  • عدد صحیح است-نشان می دهد که آیا باند شطرنجی از نوع عدد صحیح است یا خیر
  • meanCellHeight- اندازه سلول در جهت y
  • MeanCellWidth- اندازه سلول در جهت x
  • noDataValue-مقدار NoData باند شطرنجی
  • pixelType- نوع پیکسل، مانند عدد صحیح 8 بیتی، عدد صحیح 16 بیتی، نقطه شناور تک دقیق و موارد دیگر
  • PrimarField-شاخص رشته
  • نوع جدول- نام کلاس جدول
  • عرض- تعداد ستون ها

برای مجموعه داده های شطرنجی تک باندی، خود باند لازم نیست مشخص شود (در نهایت فقط یکی وجود دارد)، و با توصیف مجموعه داده شطرنجی می توان مستقیماً به ویژگی ها دسترسی داشت. به عنوان مثال، کد زیر اندازه سلول و نوع پیکسل یک شطرنجی تک باند را تعیین می کند:

واردات کمان

از arcpy import env

env.workspace = “C:/Raster”

رستر = “landcover.tif”

desc = arcpy.da.Describe(raster)

چاپ (نزولی [“meanCellHeight”])

چاپ (نزولی [“meanCellWidth”])

چاپ (نزولی [“pixelType”])

برای این مثال، کد مقادیر 30.0 در 30.0 و U8 را برمی‌گرداند – به این معنی که اندازه سلول 30 در 30 متر است و نوع پیکسل یک عدد صحیح 8 بیتی بدون علامت است. یک عدد صحیح بدون علامت مقادیر منفی را ذخیره نمی کند، در حالی که یک عدد صحیح امضا شده این کار را انجام می دهد. این ویژگی ها واحدهای افقی را گزارش نمی کنند، که باید از اطلاعات مرجع مکانی به دست آید. به عنوان مثال، کد زیر نام مرجع مکانی و واحد را تعیین می کند:

spatialref = توصیف [“مرجع فضایی”]

چاپ (spatialref.name)

print(spatialref.linearUnitName)

با این حال، برای شطرنجی های چند باندی، باندهای فردی باید مشخص شوند. بدون باند خاص، ویژگی هایی مانند اندازه سلول، ارتفاع، عرض و نوع پیکسل را نمی توان تعیین کرد. مثال زیر را از یک رستر به نام tm.img در نظر بگیرید که از سه باند با استفاده از یک اسکریپت تشکیل شده است:

واردات کمان

از arcpy import env

env.workspace = “C:/Raster”

رستر = “tm.img”

desc = arcpy.da.Describe(raster)

چاپ (نزولی [“meanCellHeight”])

از آنجایی که مجموعه داده شطرنجی tm.img حاوی چندین باند است، ویژگی های باند خاص برای خود مجموعه داده شطرنجی قابل دسترسی نیست و کد یک خطا برمی گرداند:

خطای کلیدی: ‘meanCellHeight’

باندهای خاص با استفاده از Band_1، Band_2 و غیره ارجاع داده می شوند. کد زیر نحوه دسترسی به خصوصیات یک باند در مجموعه داده شطرنجی چند باندی را نشان می دهد:

واردات کمان

از arcpy import env

env.workspace = “C:/Raster”

rasband = “sentinel.tif/Band_1”

desc = arcpy.da.Describe(rasband)

چاپ (صفحه [“داده نوع”])

چاپ (نزولی [“meanCellHeight”])

این کد برمی گرددRasterBandبرای نوع داده و همچنین اندازه سلول برای این باند شطرنجی خاص.

باندهای منفرد در شطرنجی گاهی اوقات به جای Band_1، Band_2 و موارد مشابه به عنوان Layer_1، Layer_2 و غیره معرفی می شوند. شما می توانید نام گروه ها را با استفاده ازفرزندانویژگی. این ویژگی یک دیکشنری را برمی گرداند، درست مانند دیکشنری که توسط theda.Describe()عملکرد. شما می توانید با استفاده از کلیدهای فرهنگ لغت به ویژگی های هر باند دسترسی پیدا کنید، همانطور که به ویژگی های یک مجموعه داده شطرنجی دسترسی دارید. کد مثال زیر نام باندهای مجموعه داده شطرنجی چند باندی را تعیین می کند:

واردات کمان

arcpy.env.workspace = “C:/Raster”

landsat = “tm.img”

desc = arcpy.da.Describe(landsat)

برای rband در توصیف [“کودکان”]:

چاپ (rband[“نام”])

برای یک مجموعه داده شطرنجی چند باند معمولی، نتیجه به شرح زیر است:

لایه_1

لایه_2

لایه_3

هنگام نوشتن اسکریپت برای کار با رستر، ممکن است لازم باشد تعداد باندها را تعیین کنید. کدی که برای شطرنجی تک باندی کار می کند ممکن است برای شطرنجی چند باندی کار نکند. درتعداد باندویژگی یک مجموعه داده شطرنجی می تواند تعداد باندها را تعیین کند. اگر تعداد باندها بیشتر از 1 باشد، مجموعه داده شطرنجی چند باند در نظر گرفته می شود. می توانید از تعداد باند برای ایجاد لیستی از نام باندها با استفاده از لایه پایه یا Band_ استفاده کنید.

کد مثال زیر تعداد ردیف‌ها و سلول‌های ستونی را برای رسترهای تک باند و چند باند چاپ می‌کند. برای شطرنجی های چند باندی، ویژگی های هر باند چاپ می شود.

واردات کمان

از arcpy import env

env.workspace = “C:/Raster”

رستر = “tm.img”

rdesc = arcpy.da.Describe(raster)

bandcount = rdesc[“bandCount”]

اگر تعداد باند == 1:

print(“نام رستر: ” + str(rdesc[“baseName”]))

print(“تعداد ردیف: ” + str(rdesc[“ارتفاع”]))

print(“تعداد ستونها: ” + str(rdesc[“width”]))

اگر تعداد باند > 1:

شمارنده = 1

while counter <= bandcount:

band = “Layer_” + str(counter)

bdesc = arcpy.da.Describe(raster + “/” + band)

print(“نام رستر: ” + str(rdesc[“baseName”]))

print(“نام باند: ” + str(bdesc[“baseName”]))

print(“تعداد ردیف: ” + str(bdesc[“ارتفاع”]))

print(“تعداد ستون ها: ” + str(bdesc[“width”]))

شمارنده += 1

اسکریپت ازتعداد باندویژگی مجموعه داده شطرنجی برای تعیین اینکه آیا شطرنجی تک باند یا چند بانده است. برای مجموعه داده های شطرنجی تک باندی، نام، ارتفاع و عرض برای مجموعه داده شطرنجی به دست می آید و نیازی به تعیین باند خاصی نیست. برای مجموعه داده های شطرنجی چند باندی، اسکریپت روی باندهایی به نام Layer_1، Layer_2 و غیره تکرار می شود تا زمانی که به تعداد کل باندها برسد. نام، ارتفاع و عرض برای هر باند تعیین می شود.

برای یک مجموعه داده شطرنجی چند باند معمولی، خروجی به شرح زیر است:

نام رستر: tm

نام باند: Layer_1

تعداد ردیف: 1913

تعداد ستون ها: 1990

نام رستر: tm

نام باند: Layer_2

تعداد ردیف: 1913

تعداد ستون ها: 1990

نام رستر: tm

نام باند: Layer_3

تعداد ردیف: 1913

تعداد ستون ها: 1990

در این مثال، خواص برای همه باندهای شطرنجی چند باند یکسان است، اما همیشه اینطور نیست.

توجه داشته باشید که فرض در این کد مثال این است که نام باندها با شروع می شود”لایه_”، اما اگر مطمئن نیستید، می توانید از آن استفاده کنیدفرزندانویژگی برای تایید نام ها، که راه حل قوی تری است.

اگرچه می توانید باندها را در شطرنجی چند باندی با استفاده از آن توصیف کنیدتوصیف کردن()یاda.Describe()، انواع خاصی از تجزیه و تحلیل ممکن است نیاز به دسترسی به باندها به عنوان اشیاء شطرنجی داشته باشد. این کار با تکرار روی باندها و استفاده از آن انجام می شودشطرنجیکلاس برای ایجاد یک شی شطرنجی از هر باند. مسیرهای کاتالوگ برای تایید چاپ می شوند:

واردات کمان

arcpy.env.workspace = “C:/Raster”

landsat = “tm.img”

desc = arcpy.da.Describe(landsat)

برای rband در توصیف [“کودکان”]:

name = rband [“نام”]

ras = arcpy.Raster(“tm.img” + “/” + نام)

print(ras.catalogPath)

نتیجه برای یک رستر چند باند معمولی به شرح زیر است:

C:\Raster\tm.img\Layer_1

C:\Raster\tm.img\Layer_2

C:\Raster\tm.img\Layer_3

این راه حل قوی تر و مختصرتر از مثال قبلی است زیرا نیازی به تعیین تعداد باند به عنوان یک مرحله جداگانه نیست و نام گروه ها بدون هیچ گونه فرضی در مورد نام آنها در فیلمنامه تعیین می شود.

10.6فهرست شطرنجی ها

نمونه هایی که تاکنون با مجموعه داده های شطرنجی منفرد کار کرده اند. در بسیاری از موارد، برنامه نویسی برای انجام وظایف پردازش و تجزیه و تحلیل بسیاری از مجموعه داده های شطرنجی استفاده می شود. این جایی است که توابع لیست وارد می شوند. فصل 6 توابع لیست را توضیح می دهد اما این فصل این توابع را مجدداً بررسی می کند تا کاربرد آنها در کار با مجموعه داده های شطرنجی را نشان دهد. درListRasters()تابع یک لیست پایتون از نام های شطرنجی را در یک فضای کاری برمی گرداند. نحو تابع است

ListRasters({wild_card}، {raster_type})

یک اختیاریwild_cardپارامتر لیست را بر اساس نام رسترها محدود می کند. اختیاریشطرنجی_نوعپارامتر لیست را بر اساس نوع شطرنجی محدود می کند – به عنوان مثال، JPEG یا TIFF.

کد زیر استفاده از را نشان می دهدListRasters()عملکرد چاپ لیستی از نام های شطرنجی در یک فضای کاری:

واردات کمان

arcpy.env.workspace = “C:/raster”

rasterlist = arcpy.ListRasters()

برای رستر در رسترلیست:

چاپ (رستر)

خروجی به صورت زیر است:

ارتفاع

پوشش زمین.تیف

tm.img

نام هر رستر همراه با پسوند فایل اختیاری چاپ می شود. به عنوان مثال، پسوند فایل .img برای فرمت ERDAS IMAGINE، .tif برای فرمت TIFF، jpg. برای فرمت JPEG و غیره است. هیچ پسوند فایلی برای قالب Esri GRID (پایگاه اطلاعاتی منابع جهانی) یا برای رسترهای ذخیره شده در یک پایگاه جغرافیایی اضافه نشده است. بنابراین، زمانی که هیچ پسوند فایلی وجود ندارد، مطمئن شوید که آیا با یک رستر در قالب GRID کار می کنید یا با یک رستر در یک پایگاه داده جغرافیایی.

پارامترهایListRasters()عملکرد نتایج را فیلتر کنید به عنوان مثال، کد زیر فهرستی از رسترهای فضای کاری را که در قالب ERDAS IMAGINE هستند چاپ می کند:

واردات کمان

arcpy.env.workspace = “C:/Raster”

rasterlist = arcpy.ListRasters(“*”، “IMG”)

برای رستر در رسترلیست:

چاپ (رستر)

هنگامی که نام های شطرنجی به دست آمد، می توان از توابع دیگر برای توصیف داده ها یا انجام سایر وظایف پردازشی استفاده کرد. مهم است که تشخیص دهیم کهListRasters()تابع لیستی از نام مجموعه داده های شطرنجی، نه اشیاء شطرنجی را برمی گرداند. مثال زیر نحوه تکرار بر روی لیست نام های شطرنجی و ایجاد یک شی شطرنجی برای هر مجموعه داده شطرنجی را نشان می دهد:

واردات کمان

arcpy.env.workspace = “C:/Raster”

rasterlist = arcpy.ListRasters()

برای رستر در رسترلیست:

myras = arcpy.Raster(raster)

چاپ (myras.name)

چاپ (myras.format)

اسکریپت نام و قالب هر شیء شطرنجی را چاپ می کند، اما چاپ فقط به عنوان یک مکان نگهدار موقت برای کارهای معنی دار تر عمل می کند. هنگامی که اشیاء شطرنجی به دست آمد، می توان از آنها در ابزارهای پردازش جغرافیایی و عبارات جبر نقشه استفاده کرد.

10.7تحلیل شطرنجی با استفاده از ابزارهای ژئوپردازش

یکی از جنبه های مهم کار با داده های شطرنجی در برنامه نویسی، انجام تجزیه و تحلیل داده های شطرنجی است. بیشتر ابزارهای پسوندهای Spatial Analyst و Image Analyst به عنوان توابع در دسترس هستندarcpy.saوarcpy.iaماژول ها بخش‌های قبلی قبلاً نمونه‌هایی از ابزارهای در حال اجرا را از این ماژول‌ها نشان داده‌اند، اما این فرآیند در اینجا با جزئیات بیشتر مورد بررسی قرار می‌گیرد.

مثال زیر را در نظر بگیرید که ابزار Slope را اجرا می کندarcpy.saمدول:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = (“C:/Raster”)

elev = arcpy.Raster(“C:/Raster/”elevation”)

outraster = شیب (elev)

سینتکس ابزار Slope به شرح زیر است:

شیب (in_raster، {output_measurement}، {z_factor}،

{method}، {z_unit})

با این حال، هنگام مقایسه این نحو با کادر محاوره‌ای ابزار ابزار Slope، به نظر می‌رسد چیزی گم شده است. کادر محاوره‌ای ابزار، شطرنجی خروجی را به عنوان یک پارامتر مورد نیاز نشان می‌دهد، اما این پارامتر در نحو تابع موجود نیست.arcpy.sa.

 

خروجی از اجرای ابزار Slope با استفاده ازarcpy.sa.Slopeیک شی شطرنجی است و این شی به یک متغیر به صورت زیر اختصاص داده می شود:

outraster = شیب (elev)

برگرداندن خروجی به عنوان یک شی شطرنجی با سایر ابزارهای پردازش جغرافیایی که در آنها خروجی پارامتری از ابزار است، متفاوت است. مهم است که بدانیم مگر اینکه خروجی به یک متغیر اختصاص داده شود، شی شطرنجی ذخیره نمی شود. به عنوان مثال، خط کد زیر را در نظر بگیرید:

شیب (ارتفاع)

این کد ابزار Slope را اجرا می کند و یک شی شطرنجی را برمی گرداند، اما نتیجه ذخیره نمی شود و خط کد هیچ کاری را انجام نمی دهد.

شی شطرنجی موقت است اما می توان با فراخوانی آن دائمی شدصرفه جویی()روش بر روی شی شطرنجی با این حال، اگر قرار است در مراحل بعدی در همان اسکریپت از آنها استفاده شود، نیازی به دائمی کردن اشیاء شطرنجی نیست.

مثال زیر ابزار Slope را اجرا می‌کند و به دنبال آن ابزار Con را برای طبقه‌بندی شطرنجی شیب به دو دسته بر اساس آستانه 10 درجه اجرا می‌کند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster/Study.gdb”

elev = شطرنجی (“ارتفاع”)

شیب = شیب (ارتفاع)

slope_con = Con(شیب، 1، 0، “VALUE >= 10”)

slope_con.save (“slope_class”)

نتیجه اسکریپت یک مجموعه داده شطرنجی جدید به نام slope_class با مقادیر 0 و 1 است. نتیجه اجرای ابزار Slope فقط به عنوان یک شی شطرنجی موقت در حافظه ذخیره می شود. این رویکرد برای اسکریپت نویسی سریعتر از نوشتن تمام مجموعه داده های میانی روی دیسک است و فضای ذخیره سازی فایل را ذخیره می کند.

همانطور که در مثال های قبلی نشان داده شد، خروجی از اجرای یک ابزار ژئوپردازش به عنوان تابعی ازarpy.saیاarcpy.iaیک شی شطرنجی است. این خروجی یک پارامتر تابع نیست. با این حال، برخی از ابزارهای شطرنجی خروجی های دیگری دارند و اینها به گونه ای متفاوت مدیریت می شوند.

ابزار Viewshed را در نظر بگیرید که مکان های قابل مشاهده برای مجموعه ای از مکان های ناظر را تعیین می کند. سینتکس کلی این ابزار به شرح زیر است:

Viewshed(in_raster، in_observer_features، {z_factor}،

{انحنای_اصلاح}، {ضریب_شکست}،

{out_agl_raster})

ورودی های مورد نیاز عبارتند از شطرنجی سطح ورودی (به عنوان مثال، یک شطرنجی ارتفاعی) و یک یا چند ویژگی نقطه ای یا چند خطی که به عنوان مکان های مشاهده گر استفاده می شود. همچنین یک پارامتر اختیاری به نام وجود داردout_agl_raster. این به عنوان شطرنجی “سطح بالای زمین” (AGL) نامیده می شود. AGL نشان دهنده ارتفاعی است که باید به یک سلول غیرقابل مشاهده اضافه شود تا حداقل توسط یک ناظر قابل مشاهده باشد. این پارامتر اختیاری است.

ابتدا Viewshed بدون مشخص کردن خروجی AGL اجرا می شود:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Visibility”

dem = رستر (“ارتفاع”)

obs = “summits.shp”

view = Viewshed (dem, obs)

view.save (“view.tif”)

نتیجه ابزار Viewshed یک شی شطرنجی است که در صورت نیاز می تواند دائمی شود. برای به دست آوردن خروجی AGL اختیاری، باید به عنوان پارامتر تابع مشخص شود:

view = Viewshed(dem, obs, out_agl_raster=”agl.tif”)

خروجی AGL مستقیماً به عنوان یک مجموعه داده شطرنجی روی دیسک ذخیره می شود و به عنوان یک شی شطرنجی بازگردانده نمی شود. اجرای ابزار همچنان نتیجه viewshed را به عنوان یک شی شطرنجی برمی گرداند، اما خروجی دوم مستقیماً به عنوان یک فایل روی دیسک ذخیره می شود.

همه ابزارهای شطرنجی مجموعه داده های شطرنجی را به عنوان خروجی ایجاد نمی کنند. ابزار Tabulate Area را در نظر بگیرید که یک جدول متقاطع بین دو مجموعه داده ایجاد می کند و نتایج را به عنوان یک جدول خروجی می دهد. سینتکس کلی این ابزار به شرح زیر است:

Tabulate Area(in_zone_data, zone_field, in_class_data, class_field,

out_table، {processing_cell_size})

دو ورودی داده می توانند شطرنجی عدد صحیح یا لایه های ویژگی باشند. دو فیلد مقادیر ناحیه و کلاس را مشخص می کند که در هنگام انجام جدول بندی متقاطع استفاده شود. یک کاربرد معمولی این ابزار استفاده از رستری مناطق ارتفاعی (مثلاً کم، متوسط، مرتفع) و پوشش زمین (آب، علفزار، جنگل و غیره) و تعیین مساحت هر طبقه پوشش زمین در هر ناحیه ارتفاعی است. . جدول خروجی شامل خلاصه ای از مساحت هر کلاس در هر منطقه است.

از آنجایی که خروجی ابزار Tabulate Area یک جدول است، مانند سایر ابزارهای شطرنجی به عنوان یک شی شطرنجی برگردانده نمی شود، بلکه جدول خروجی به عنوان پارامتر ابزار مشخص می شود. اسکریپت زیر یک جدول بندی متقاطع بین مناطق ارتفاعی و پوشش زمین انجام می دهد و نتیجه را به عنوان یک جدول پایگاه داده جغرافیایی ذخیره می کند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster/Study.gdb”

zones = Raster (“elev_zones”)

lc = رستر (“پوشش زمین”)

TabulateArea (مناطق، “VALUE”، lc، “VALUE”، “crosstab”)

در این مثال، نیازی به تخصیص خروجی به یک متغیر نیست، زیرا جدول خروجی به عنوان یک جدول geodatabase دائمی ذخیره می شود. از آنجایی که ابزار خروجی شطرنجی ایجاد نمی کند، ابزار به جای یک شی شطرنجی، مانند سایر ابزارهای ژئوپردازش، یک شی نتیجه را برمی گرداند. برای ذخیره جدول خروجی نیازی به کار با این شی نتیجه نیست، اما استفاده از خروجی ها در مراحل بعدی یا بازیابی پیام ها را ممکن می سازد.

10.8استفاده از عملگرهای جبر نقشه

علاوه بر دسترسی به تمام ابزارهای ژئوپردازش،arcpy.saوarcpy.iaماژول ها همچنین شامل عملگرهای جبر نقشه هستند. اکثر این عملگرها به عنوان ابزارهای پردازش جغرافیایی تحت مجموعه ابزار ریاضی در دسترس هستند اما به عنوان عملگر در پایتون نیز در دسترس هستند. مثال زیر را در نظر بگیرید که مقادیر ارتفاع را با استفاده از ابزار Times از فوت به متر تبدیل می کند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = (“C:/Raster)

inras = arcpy.Raster(“elev_ft”)

outras = Times (inras، “0.3048”)

outras.save (“elev_m”)

به جای استفاده از ابزار Times، عملگر جبر نقشه (*) میتواند مورد استفاده قرار گیرد. خط دوم تا آخر کد به صورت زیر خواهد بود:

outras = اینراس * 0.3048

این جایگزین کوتاه تر است، اما مهمتر از آن، نوشتن عبارات جبر نقشه پیچیده تر نسبتاً آسان را ممکن می سازد.

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

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = (“C:/Raster”)

f1 = arcpy.Raster(“factor1”)

f2 = arcpy.Raster(“factor2”)

f3 = arcpy.Raster(“factor3”)

temp1raster = Plus(f1, f2)

temp2raster = Plus (temp1raster, f3)

outraster = تقسیم (temp2raster، “3”)

outraster.save (“نهایی”)

ابزار Plus باید دو بار برای اضافه کردن سه شطرنجی با هم استفاده شود زیرا ابزار می تواند تنها از دو ورودی در یک زمان استفاده کند. ابزار Divide مجموع سه رستر را بر 3 تقسیم می کند. با استفاده از عبارات جبر نقشه، این کد را می توان به صورت زیر کوتاه کرد:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = (“C:/Raster”)

f1raster = arcpy.Raster(“factor1”)

f2raster = arcpy.Raster(“factor2”)

f3raster = arcpy.Raster(“factor3”)

outraster = (f1 + f2 + f3) / 3

outraster.save (“نهایی”)

این استفاده از عبارات مقدار مناسبی از کد را ذخیره می کند و تشخیص عبارت جبر نقشه را که منطق مدل مناسب بودن را نشان می دهد آسان تر می کند. اگر این نوع عبارت آشنا به نظر می رسد، احتمالاً به این دلیل است که قبلاً از ماشین حساب رستر استفاده کرده اید.

کادر محاوره ای ابزار Raster Calculator مانند مثال در شکل است.

 

کادر محاوره ای به شما امکان می دهد با انتخاب از لایه ها و ابزارها، یک عبارت ایجاد کنید. به عنوان مثال، عبارت مورد نیاز برای مدل مناسب بودن است

(“factor1” + “factor2” + “factor3”) / 3

در کادر محاوره ای ابزار ماشین حساب رستر، شطرنجی خروجی در یک ورودی جداگانه، همانطور که در شکل نشان داده شده است، مشخص شده است.

 

این عبارت دقیقاً شبیه کد پایتون است که قبلاً استفاده شده بود. در واقع، عبارت جبر نقشه در ابزار Raster Calculator از نحو پایتون استفاده می کند. به عنوان مثال به نقل قول‌های دوتایی در اطراف نام شطرنج‌ها که رشته‌هایی در عبارت هستند توجه کنید. ابزار Raster Calculator یکی از معدود ابزارهای geoprocessing است که بخشی از ArcPy نیست. می توان از آن به عنوان یک ابزار مستقل یا به عنوان یک ابزار در ModelBuilder استفاده کرد، اما این یک تابع در ArcPy نیست. دلیل آن این است که می توانید یک عبارت جبر نقشه را مستقیماً در یک اسکریپت بنویسید، بدون اینکه نیازی به استفاده از یک تابع جداگانه باشد.

جدول 10.1 فهرستی از عملگرهای جبر نقشه را نشان می دهد که در دسترس هستندarcpy.saوarcpy.iaماژول ها آنها به چهار دسته تقسیم می شوند: حسابی، بیتی، بولی و رابطه ای. ابزارهای معادل در Spatial Analyst در ستون آخر نشان داده شده است.

دسته بندی اپراتور شرح ابزار تحلیل فضایی
حسابی منها کردن منهای
Unary Minus نفی کنید
% ماژول مد
* ضرب بار
/ بخش تقسیم کنید
// تقسیم عدد صحیح N/A
+ اضافه به علاوه
+ Unary Plus N/A
** قدرت قدرت
به صورت بیتی >> Bitwise Right Shift Bitwise Right Shift
<< Bitwise Left Shift Bitwise Left Shift
بولی ~ مکمل بولی نه بولی
& بولی و بولی و
^ Boolean Exclusive Or Boolean XOr
| بولی یا بولی یا
رابطه ای < کمتر از کمتر از
<= کمتر و برابر کمتر از مساوی
> بزرگتر از بزرگتر از
>= بزرگتر از و برابر بزرگتر از برابر
== مساوی با مساوی با
!= برابر نیست با نا برابر

بحث مفصل درباره هر عملگر خارج از محدوده این فصل است، اما برخی از مشاهدات به ترتیب زیر است:

  • اکثر عملگرها یک ابزار معادل در مجموعه ابزار ریاضی دارند، اما دو عملگر ندارند: // (تقسیم عدد صحیح) و + (به علاوه یکپارچه). با این حال، همین کار را می توان با استفاده از ترکیبی از ابزارهای دیگر انجام داد.
  • بسیاری از ابزارهای مجموعه ابزار ریاضی، عملگر جبر نقشه معادل در پایتون ندارند، از جمله ابزارهای رایج مانند Abs، Int، Float، Exp10 و Log10.

برخی از متداول ترین عملگرهای جبر نقشه با چند مثال نشان داده شده اند. یک شطرنجی ارتفاعی با مقادیری از حدود 1500 تا 4000 فوت را در نظر بگیرید. برای بخشی از یک مدل مناسب، شما می خواهید مناطق بین 2500 تا 3000 فوت را شناسایی کنید. اسکریپت زیر از جبر نقشه برای انجام این کار استفاده می کند و نتایج را در یک شطرنجی جدید ذخیره می کند:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster/Study.gdb”

elev = arcpy.Raster (“ارتفاع”)

Goodelev = (elev > 2500) و (elev < 3000)

goodelev.save (“elev_good”)

نتیجه یک مجموعه داده شطرنجی جدید با مقادیر 1 (برای ارتفاع بین 2500 تا 3000) و 0 (برای سایر مقادیر ارتفاع) است. در صورت استفاده از خروجی ها در مراحل بعدی تجزیه و تحلیل، ذخیره نتیجه در یک رستر دائمی جدید اغلب ضروری نیست. با این حال، هنگام آزمایش کد خود، ممکن است لازم باشد مراحل میانی را برای تجسم نتایج و تأیید صحت آنها ذخیره کنید.

توجه کنید که چگونه دستور جبر نقشه از پرانتز استفاده می کند تا اطمینان حاصل شود که عملگرها به ترتیب صحیح اجرا می شوند. مثلا همین عبارت بدون پرانتز است

elev > 2500 و elev < 3000

این عبارت یک خطا ایجاد می کند:

ValueError: مقدار صدق یک شطرنجی مبهم است. استفاده نامعتبر از رستر با عملگر یا تابع بولی. در صورت لزوم استفاده از پرانتز را بررسی کنید.

به طور مشخص،& elevنامعتبر است زیرا شیء شطرنجی elev یک Boolean نیست. استفاده مناسب از پرانتز عملگر Boolean And (&) بین دو شطرنجی بولی قرار می گیرد. جزئیات مربوط به استفاده از عملگرهای جبر نقشه، از جمله اولویت عملگر، در مبحث راهنمای ArcGIS Pro “کار با اپراتورها در جبر نقشه” پوشش داده شده است.

برای گسترش مثال، یک رستر پوشش زمین را با استفاده از سیستم طبقه بندی پوشش زمین اندرسون اصلاح شده در نظر بگیرید. مقادیر پوشش زمین از 11 برای آب های آزاد تا 95 برای تالاب های علفی نوظهور متغیر است. ارزش پوشش زمین مورد علاقه 41 (جنگل برگریز)، 42 (جنگل همیشه سبز) و 43 (جنگل مختلط) است. اسکریپت باید مناطقی را شناسایی کند که جنگل هستند، که می توان با استفاده از عملگر Boolean Or (|) انجام داد. در نهایت، محدوده ارتفاعی و انواع پوشش زمین مورد علاقه باید با هم ترکیب شوند، و در نتیجه شطرنجی ایجاد شود که فقط شامل مناطق جنگلی بین 2500 تا 3000 فوت است. راه حل اسکریپت به شرح زیر است:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster/Study.gdb”

elev = arcpy.Raster (“ارتفاع”)

lc = arcpy.Raster (“پوشش زمین”)

Goodelev = (elev > 2500) و (elev < 3000)

Goodland = (lc == 41) | (lc == 42) | (lc ==43)

نتیجه = Goodelev و Goodland

result.save (“نهایی”)

در این راه حل، تنها نتیجه نهایی به عنوان شطرنجی دائمی ذخیره می شود. بسیاری از کاربردهای دیگر عملیات جبر نقشه امکان پذیر است. عملگر جبر نقشه را می توان با ابزارهای معمولی برای ایجاد عبارات پیچیده تر ترکیب کرد.

10.9با استفاده از کلاس هایarcpy.saوarcpy.iaماژول ها

درarcpy.saوarcpy.iaماژول ها شامل چندین کلاس هستند که در درجه اول برای تعریف پارامترهای ابزار شطرنجی استفاده می شوند. به طور معمول، این کلاس ها به عنوان میانبر برای پارامترهای ابزار استفاده می شوند که در غیر این صورت به مقدار رشته پیچیده تری نیاز دارند.

مثال ابزار Reclassification را در نظر بگیرید. با استفاده از این ابزار، به سلول‌های شطرنجی مقدار جدیدی بر اساس جدول remap داده می‌شود که به آن «جدول طبقه‌بندی مجدد» نیز گفته می‌شود. جدول remap نشان می دهد که چگونه هر مقدار قدیمی به یک مقدار جدید نگاشت می شود. کادر محاوره‌ای ابزار در شکل نمونه‌ای از یک رستر کاربری زمین را نشان می‌دهد که به چندین مقدار جدید به عنوان بخشی از یک مدل مناسب طبقه‌بندی شده است.

 

در این مثال، مقادیر ورودی شامل رشته هایی است که نوع کاربری زمین را توصیف می کند، اما این مقادیر می توانند عددی نیز باشند.

نحو ابزار Reclassify است

طبقه‌بندی مجدد (در_راستر، فیلد_بازکلاس، نقشه‌برداری مجدد، {مقدارات_از دست رفته})

تایپ تمام مقادیر جدول remap به طور مستقیم به عنوان یک پارامتر پیچیده خواهد بود زیرا این جدول می تواند ورودی های مختلفی داشته باشد. در عوض،نقشه مجدداز پارامتر استفاده می شود تا جدول remap به عنوان یک شی جداگانه ایجاد شود. دو کلاس مختلف را می توان برای استفاده استفاده کردنقشه مجددپارامتر، بسته به ماهیت طبقه بندی مجدد:

  • RemapValue- فهرستی از مقادیر ورودی جداگانه که باید مجدداً طبقه بندی شوند
  • RemapRange- فهرستی که محدوده مقادیر ورودی را شناسایی می کند که باید مجدداً طبقه بندی شوند

نحو ازRemapValueشی است

RemapValue (remapTable)

آremapTableشی با استفاده از یک لیست پایتون از لیست ها تعریف می شود که در آن هر لیست حاوی مقادیر قدیمی و جدید است، شبیه به جدول remap در جعبه گفتگوی ابزار. نحو یک جدول remap برای استفاده در aRemapValueشی است

[[oldValue1، newValue1]، [oldValue2، newValue2]، …]

کد زیر استفاده از یک شی remap را برای انجام طبقه‌بندی مجدد یک رستر نشان‌دهنده کاربری زمین نشان می‌دهد:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster”

myremap = RemapValue([[“Brush/transitional”، 2],

[“آب”، 0]، [“زمین بایر”، 1]،

[“ساخته شده”، 1]، [“کشاورزی”، 3]،

[“جنگل”، 5]، [“تالاب ها”، 4]])

outreclass = طبقه بندی مجدد (“استفاده از زمین”، “LANDUSE”، نقشه myrem)

outreclass.save (“lu_reclass”)

نیازی به افزودن ورودی برای NoData نیست مگر اینکه نیاز باشد مقادیر NoData در ورودی به مقدار دیگری اختصاص داده شود. هنگام استفاده از کادر محاوره‌ای ابزار Reclassify، می‌توانید یک جدول remap ایجاد شده در جعبه محاوره ابزار را در یک فایل متنی ذخیره کنید یا یک جدول remap را که قبلا ایجاد شده بود به عنوان یک فایل متنی در جعبه گفتگوی ابزار بارگذاری کنید. برای یک اسکریپت، جداول remap باید به عنوان یک لیست پایتون در اسکریپت ایجاد شوند.

درRemapRangeشی به روشی مشابه کار می کند اما از محدوده ها به جای مقادیر فردی استفاده می کند. نحو یک جدول remap برای استفاده در aRemapRangeشی است

[[startValue، endValue، newValue]، …]

کد زیر استفاده از یک شی remap برای انجام طبقه‌بندی مجدد یک شطرنجی ارتفاع را نشان می‌دهد:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = (“C:/Raster”)

myremap = RemapRange([[1, 1000, 0], [1000, 2000, 1],

[2000، 3000، 2]، [3000، 4000، 3]])

outreclass = Reclassify (“elevation”، “VALUE”، myremap)

outreclass.save(“elev_recl”)

توجه داشته باشید که مقدار پایانی محدوده اول (1000-1) با مقدار شروع محدوده دوم (1000-2000) و غیره است. این نوع از جدول remap زمانی رایج است که داده ها پیوسته هستند، مانند حالت شطرنجی ارتفاع. علاوه بر ابزار Reclassify، جداول remap نیز در ابزار Weighted Overlay استفاده می شود.

بسیاری از کلاس های دیگر درarcpy.saمدول. آنها را می توان بر اساس عملکرد منطقی به چندین دسته دسته بندی کرد. جدول 10.2 این دسته ها را فهرست می کند.

arcpy.saمدول

دسته بندی شرح
درهم توابع عضویت را برای تحلیل منطق فازی تعریف می کند
عامل افقی فاکتور افقی را برای ابزارهای Path Distance شناسایی می کند
مدل کریجینگ مدل ایجاد سطوح با کریجینگ را تعریف می کند
محله همسایگی ورودی را برای یک سری ابزار تعریف می کند
پوشش جداول ورودی را برای ابزارهای Weighted Overlay و Weighted Sum ایجاد می کند
شعاع شعاع ابزار IDW و kriging را مشخص می کند
نقشه مجدد جداول remap مورد استفاده در ابزارهای Reclassify و Weighted Overlay را تعریف می کند
زمان فاصله زمانی استفاده در ابزارهای تابش خورشیدی را مشخص می کند
توپو ورودی ابزار Topo To Raster را تعریف می کند
تابع تبدیل نوع تبدیل را به عنوان ورودی ابزار Rescale by Function تعریف می کند
فاکتور عمودی فاکتور عمودی را برای ابزارهای Path Distance شناسایی می کند

درarcpy.iaماژول همچنین شامل سه کلاس برای کار با بلوک های پیکسل و مجموعه های شطرنجی است:PixelBlock،PixelBlockCollection، وRasterCollection.

در میان کلاس های پر استفاده تر ازarcpy.saماژول، علاوه بر کلاس‌های remap که قبلاً مورد بحث قرار گرفتیم، کلاس‌های همسایگی هستند که همسایگی‌هایی را با اشکال و اندازه‌های مختلف تعریف می‌کنند. برای مثال ابزار Focal Statistics را در نظر بگیرید. این ابزار و همچنین سایر ابزارهای جعبه ابزار Neighborhood نیاز به تعریف یک محله خاص دارد.

 

تنظیمات محله با نوع محله متفاوت است. برای مثال، برای همسایگی مستطیلی پیش‌فرض، تنظیمات شامل ارتفاع و عرض در واحدهای سلول یا نقشه است. با این حال، برای همسایگی گوه، پارامترها شامل زاویه شروع، زاویه پایان و شعاع در واحد سلول یا نقشه است.

 

به دلیل متغیر بودن این پارامترها، توابع همسایگی شامل یک شیء همسایگی هستند. برای مثال، نحو ابزار Focal Statistics به شرح زیر است:

FocalStatistics(in_raster، {neighborhood}، {statistics_type}، {ignore_nodata}، {percentile_value}))

شش شیء محله مختلف وجود دارد که هر کدام مجموعه ای از پارامترهای منحصر به فرد خود را دارند. آنها به شرح زیر است:

  • NbrAnnulus- یک محله حلقوی یا حلقه مانند را تعریف می کند که با تعیین شعاع دایره داخلی و دایره بیرونی در واحدهای نقشه یا تعداد سلول ها ایجاد می شود.
  • NbrCircle- همسایگی دایره ای را تعریف می کند که با تعیین شعاع در واحدهای نقشه یا تعداد سلول ها ایجاد می شود.
  • Nbr نامنظم- یک محله نامنظم را تعریف می کند که توسط یک فایل هسته ایجاد می شود.
  • مستطیل Nbr- یک همسایگی مستطیلی را تعریف می کند که با تعیین ارتفاع و عرض در واحدهای نقشه یا تعداد سلول ها ایجاد می شود.
  • NbrWedge- همسایگی گوه ای را تعریف می کند که با تعیین شعاع و دو زاویه در واحدهای نقشه یا تعداد سلول ها ایجاد می شود.
  • وزن Nbr-همسایگی وزنی را تعریف می‌کند که موقعیت‌های سلولی را که باید در همسایگی گنجانده شود و وزن‌هایی را برای ضرب مقادیر سلول شطرنجی ورودی مشخص می‌کند.

به عنوان مثال، نحو ازمستطیل Nbrشی است

مستطیل Nbr({عرض}، {ارتفاع}، {واحد})

کد زیر یک شیء همسایگی را تعریف می کند و از آن در قسمت استفاده می کندFocalStatisticsعملکرد:

واردات کمان

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster”

mynbr = NbrRectangle (5، 5، “CELL”)

outraster = FocalStatistics (“استفاده از زمین”، mynbr، “VARIETY”)

outraster.save (“lu_var”)

در این مثال، خروجی یک شطرنجی از تنوع پوشش زمین بر اساس یک همسایگی مستطیلی از 5 خانه در 5 سلول است.

بسیاری از دسته های دیگر از کلاس ها تخصصی هستند و فقط در یک یا تعداد کمی ابزار استفاده می شوند. به عنوان مثال، کلاس های topo شامل 9 کلاس مختلف است، اما این کلاس ها فقط در ابزار Topo To Raster استفاده می شوند.

10.10کار با Raster Cell Iterator

درarcpy.saماژول شامل رویکرد دیگری برای کار با داده های شطرنجی به نام Raster Cell Iterator (RCI) است. Rester Cell Iterator که به عنوان تکرار کننده شطرنجی نیز شناخته می شود، امکان تکرار در تمام سلول های یک یا چند شطرنجی را فراهم می کند. می‌توانید مقادیر تک تک سلول‌ها را بخوانید و بنویسید، و سلول‌ها با استفاده از یک سیستم نمایه‌سازی متشکل از جفت‌های سطر و ستون، با مکانشان در شطرنجی ارجاع داده می‌شوند. این رویکرد برای کار با رسترها با ابزارهای پردازش جغرافیایی متفاوت است، که در آن شما معمولاً کل رستر را بدون بازرسی صریح مقادیر سلول های جداگانه در هر مکان پردازش می کنید.

کارهای معمولی که با RCI انجام می شود شامل تخصیص مقادیر به سلول های خاص، ایجاد رسترهای خالی و مدیریت مقادیر NoData است. RCI به عنوان بخشی از در دسترس استarcpy.caماژول ArcPy هیچ معادل مستقیمی در برنامه ArcGIS Pro وجود ندارد، بنابراین عملکرد مشابه با ابزارهای پردازش جغرافیایی قابل تکرار نیست.

دو راه برای استفاده از عملکرد RCI وجود دارد: (1) استفاده از تکرار کننده ضمنی که بر روی یک شی شطرنجی تعریف شده است، و (2) استفاده از صریحRasterCellIteratorکلاس تفاوت اصلی این است که تکرار کننده ضمنی فقط برای یک مجموعه داده شطرنجی کار می کند، در حالی که تکرار کننده صریح برای کار با مجموعه داده های شطرنجی متعدد طراحی شده است. در این بخش فقط به تکرار کننده ضمنی پرداخته می شود. جزئیات مربوط به تکرار کننده صریح را می توان در مستندات آن یافتRasterCellIteratorکلاس در صفحات راهنمای ArcGIS Pro.

استفاده از RCI به یک شی شطرنجی نیاز دارد که با استفاده ازشطرنجیکلاس کد زیر یک شی شطرنجی به نام ایجاد می کندگیاهی:

از واردات arcpy.sa *

vegras = Raster(“C:/Raster/vegetation.tif”)

یک تکرار کننده ضمنی بر روی این شی شطرنجی تعریف شده است که جفت های شاخص سطر و ستون را برمی شمارد. هیچ کد اضافی برای شروع استفاده از تکرار کننده لازم نیست زیرا زمانی که شی شطرنجی ایجاد می شود در دسترس است. طبق قرارداد، ردیف ها اغلب با حرف کوچک i و ستون ها با حرف j نامیده می شوند. مکان هر سلول در یک رستر را می توان با جفت شاخص آن [i, j] نشان داد. مقدار سلول برای یک سلول را می توان با استفاده از این جفت شاخص به دست آورد – برای مثال،گیاهخوار[i، j].

کد زیر روی تمام سلول‌های شی شطرنجی تکرار می‌شود و مکان هر سلول و مقدار آن را با استفاده از این نماد نمایه چاپ می‌کند:

برای i، j در وگراس:

چاپ (i، j، گیاهی[i، j])

همانطور که در شکل نشان داده شده است، یک شطرنجی کوچک با تنها پنج ردیف و پنج ستون، با پنج مقدار سلول متفاوت در نظر بگیرید.

 

بخش بالای پرینت از اسکریپت مثال قبلی به شرح زیر است:

0 0 5

0 1 5

0 2 2

0 3 5

0 4 2

1 0 5

1 1 2

پرینت کامل شامل 25 خط، یک خط برای هر سلول جداگانه است. چاپ مقادیر سلول برای کل رستر به خودی خود مفید نیست، اما استفاده از تکرار کننده شطرنجی ضمنی برای بررسی مقادیر همه سلول ها و استفاده از نماد شاخص برای مکان سلول های جداگانه را نشان می دهد.

یک کار رایج با استفاده از RCI، تخصیص مقادیر به سلول های شطرنجی خاص و اصلاح مجموعه داده های شطرنجی است. هنگامی که اشیاء شطرنجی از یک مجموعه داده شطرنجی موجود ایجاد می شوند، آنهافقط خواندنیدارایی تنظیم شده استدرست است، واقعی. برای اصلاح یک مجموعه داده شطرنجی، این ویژگی باید روی تنظیم شودنادرست. هنگامی که به سلول های شطرنجی یک مقدار جدید اختصاص داده شد، مجموعه داده شطرنجی باید با استفاده از ذخیره شودصرفه جویی()روش. اسکریپت کامل به شرح زیر است:

از واردات arcpy.sa *

vegras = Raster(“C:/Raster/vegetation.tif”)

vegras.readOnly = نادرست

برای i، j در وگراس:

اگر گیاه گیاهی[i، j] == 4:

vegras[i, j] = 2

vegras.save()

در این اسکریپت از تکرار کننده شطرنجی برای تکرار روی تمام سلول ها استفاده می شود و اگر مقدار سلول برابر با 4 باشد با مقدار 2 جایگزین می شود. شطرنجی به دست آمده در شکل نشان داده شده است.

 

نمونه دیگری از این کنترل ریز دانه، تغییر مقادیر سلول بر اساس مکان های خاص است. اسکریپت زیر مقدار سلول را برای یک ردیف از مجموعه داده شطرنجی تغییر می دهد:

از واردات arcpy.sa *

vegras = Raster(“C:/Raster/vegetation.tif”)

vegras.readOnly = نادرست

برای i، j در وگراس:

vegras[4, j] = 5

vegras.save()

در این اسکریپت، تمام مقادیر سلول در ردیف 4 با مقدار 5 جایگزین می شود. شطرنجی به دست آمده در شکل نشان داده شده است.

 

نمونه معمولی دیگر استفاده از تکرار کننده شطرنجی، کار با مقادیر NoData است. مقدار سلول NoData مربوط به مقدار استNaNدر پایتونNaNمخفف “not a number” است و برای مقادیر از دست رفته استفاده می شود. شما می توانید با ارزش کار کنیدNaNبا استفاده ازریاضیماژول یاNumPyبسته بندی اسکریپت زیر با استفاده از یک مقدار سلول خاص را به NoData تغییر می دهدریاضی.نان، که یک مقدار NaN ممیز شناور است.

واردات ریاضی

از واردات arcpy.sa *

vegras = Raster(“C:/Raster/vegetation.tif”)

vegras.readOnly = نادرست

برای i، j در وگراس:

اگر گیاه گیاهی[i، j] == 3:

vegras[i، j] = ریاضی.نان

vegras.save()

در این اسکریپت، تمام مقادیر سلول 3 با مقدار NoData جایگزین می شوند. شطرنجی به دست آمده در شکل نشان داده شده است.

 

برای پرس و جو که آیا یک مقدار سلول NoData است، می توانید از آن استفاده کنیدmath.isnan()عملکرد. این تابع تعیین می کند که آیا یک مقدار وجود دارد یا خیرNaNو یک Boolean برمی گرداند.

برخی از این نتایج را می‌توان با استفاده از روش‌های دیگر نیز انجام داد – به عنوان مثال، با استفاده از ابزارهای پردازش جغرافیایی مانند طبقه‌بندی مجدد یا عبارات جبر نقشه با استفاده از عبارت Con. اما RCI کنترل ریزدانه اضافی را فراهم می کند که با این رویکردها امکان پذیر نیست، و تغییرات به جای تولید یک شی شطرنجی جدید در مجموعه داده های شطرنجی موجود ایجاد می شود. نمونه های پیشرفته تر در مستندات Raster Cell Iterator گنجانده شده است.

10.11استفاده از توابع تحلیلگر فضایی

درarcpy.saوarcpy.iaماژول ها شامل بسیاری از توابع اضافی برای کار با داده های شطرنجی هستند. اکثر این توابع بر اساس توابع شطرنجی در ArcGIS Pro هستند. توابع شطرنجی در ArcGIS Pro عملیاتی هستند که پردازش را مستقیماً بر روی سلول های مجموعه داده های شطرنجی بدون نوشتن شطرنجی جدید روی دیسک اعمال می کنند. این پردازش در تضاد با ابزارهای geoprocessing است که معمولاً نتایج را در قالب مجموعه داده های شطرنجی جدید روی دیسک می نویسند. هنگام استفاده از یک تابع شطرنجی، محاسبات بر روی سلول ها به عنوان شطرنجی نمایش داده می شود، بنابراین فقط سلول هایی که روی صفحه قابل مشاهده هستند پردازش می شوند. خروجی یک تابع شطرنجی یک لایه شطرنجی مجازی است.

در برنامه ArcGIS Pro، با کلیک بر روی Raster Functions، که پنجره Raster Functions ظاهر می شود، به توابع شطرنجی از تب Imagery دسترسی پیدا می کنید.

 

توابع مختلف زیادی وجود دارد. برخی از توابع معادل ابزارهای ژئوپردازش هستند (مثلاً همپوشانی وزنی)، در حالی که برخی دیگر منحصر به فرد هستند (مثلاً Wind Chill). هر تابع دارای یک کادر محاوره ای است که شبیه جعبه محاوره ای ابزار پردازش جغرافیایی است.

 

تفاوت‌های متعددی بین جعبه‌های محاوره‌ای برای توابع شطرنجی و ابزارهای پردازش جغرافیایی وجود دارد، اما تفاوت اصلی این است که خروجی یک تابع شطرنجی به جای مجموعه داده‌های شطرنجی جدید ذخیره شده روی دیسک، یک لایه شطرنجی مجازی جدید است. به همین دلیل است که کادر محاوره ای تابع شطرنجی “ایجاد لایه جدید” (به جای “Run”) را نشان می دهد و هیچ پارامتر خروجی وجود ندارد.

توجه داشته باشید:بحث دقیق در مورد توابع شطرنجی خارج از محدوده این کتاب است. جزئیات را می توان در عنوان “توابع Raster” در صفحه راهنمای ArcGIS Pro یافت.

توابع شطرنجی به عنوان الگوهای تابع شطرنجی (RFT) ذخیره می شوند. با استفاده از ویرایشگر توابع می توانید یک گردش کاری ایجاد کنید که شامل دنباله ای از توابع شطرنجی باشد. Function Editor یک زبان برنامه نویسی بصری است، مانند ModelBuilder، اما به طور خاص برای جریان های کاری تجزیه و تحلیل تصاویر و شطرنجی طراحی شده است. این گردش کار را می توان به عنوان RFT های جدید ذخیره کرد. توابع شطرنجی در پایتون نوشته شده اند، اما کدها به راحتی از داخل ArcGIS Pro قابل دسترسی نیستند. می‌توانید برخی از فایل‌های .py مرتبط را در پوشه نصب ArcGIS Pro، که معمولاً در C:\Program Files\ArcGIS\Pro\Resources\Raster\Functions\System قرار دارد، پیدا کنید. اسکریپت Windchill.py در شکل به عنوان نمونه نشان داده شده است.

 

شما همچنین می توانید توابع شطرنجی سفارشی خود را ایجاد کنید که در پایتون نوشته شده است. اگرچه توابع شطرنجی از پایتون استفاده می کنند، اما از ArcPy استفاده نمی کنند. به عنوان مثال، اسکریپت Windchill.py قبلی استفاده نمی کندواردات کمان، اما در عوض برای پردازش داده های شطرنجی به شدت به NumPy متکی است.

حتی اگر توابع شطرنجی از ArcPy استفاده نمی کنند، بسیاری از توابع شطرنجی نیز از توابع هستندarcpy.saوarcpy.iaماژول ها این توابع به طور موثر عملکرد را کپی می کنند اما استفاده از توابع شطرنجی انتخاب شده از داخل ArcPy را ممکن می سازند. بسیاری از این توابع به مجوز Spatial Analyst یا Image Analyst نیاز ندارند، اما بخشی ازarcpy.saوarcpy.iaماژول ها

در نظر بگیریدWindChill()عملکردarcpy.sa. سینتکس این تابع به صورت زیر است:

WindChill(temperature_raster, wind_speed_raster, {temperature_units},

{wind_speed_units}، {wind_chill_units})

این تابع از شطرنج های ورودی برای دما و سرعت باد برای محاسبه ضریب سرمای باد با استفاده از یک فرمول شناخته شده استفاده می کند. مقدار پیش فرض برای واحدهای دما فارنهایت و برای واحدهای سرعت باد مایل در ساعت (مایل در ساعت) است. اسکریپت مثال زیر با استفاده از واحدهای پیش‌فرض یک رستر بادگیر جدید به شرح زیر ایجاد می‌کند:

از واردات arcpy.sa *

arcpy.env.workspace = “C:/Raster”

t = “temperature.tif”

ws = “windspeed.tif”

لرز = باد سرد (t، ws)

chill.save (“windchill.tif”)

زیرا خروجی ازWindChill()تابع یک شی شطرنجی موقت استصرفه جویی()روشی برای ماندگاری آن استفاده می شود.

مهم است که تشخیص دهیم کهWindChill()تابع تابعی ازarcpy.saماژول، بنابراین می توان از آن در اسکریپتی استفاده کرد که از دیگر عملکردهای ArcPy استفاده می کند. این عملکرد مشابه تابع شطرنجی به نام Wind Chill در بخش Raster Function در ArcGIS Pro است. با این حال، شما این قابلیت را وارد نمی‌کنید زیرا عملکردهای شطرنجی در ArcGIS Pro بر خلاف ابزارهای پردازش جغرافیایی با استفاده از ArcPy قابل فراخوانی نیستند. علاوه بر این، اسکریپت WindChill.py نیز به طور مستقیم استفاده نمی شود. اگر علاقه مند به نحوه دقیق انجام محاسبات هستید، می توانید با این اسکریپت مشورت کنید، اما کد واقعی برای انجام محاسبات هنگام وارد کردن در دسترس است.arcpy.saمدول. کد زیرین برای افزایش بیشتر عملکرد ArcPy کپی شده است.

عملکرد چندین ده تابع شطرنجی به عنوان توابع موجود استarcpy.saوarcpy.iaماژول ها این توابع در چندین دسته سازماندهی می شوند، از جمله تجزیه و تحلیل، ظاهر، طبقه بندی، تبدیل، تصحیح، مدیریت داده ها، فاصله، هیدرولوژی، ریاضی، طبقه بندی مجدد، آماری و سطح. برخی از این توابع به مجوز Spatial Analyst یا Image Analyst نیاز دارند، اما بسیاری از آنها نیازی به مجوز ندارند. اگرچه برخی از همپوشانی با ابزارهای geoprocessing وجود دارد، بسیاری از توابع قابلیت های تجزیه و تحلیل و پردازش منحصر به فردی را ارائه می دهند.

10.12کار با آرایه های NumPy

دو عملکرد دیگر باید ذکر شود:NumPyArrayToRaster()وRasterToNumPyArray(). اینها توابع ArcPy معمولی هستند، نه توابعarcpy.saیاarcpy.iaماژول ها این دو تابع امکان تبدیل بین رسترها و آرایه های NumPy را فراهم می کنند.

توجه داشته باشید:چندین عملکرد در دسترس هستندarcpy.daماژول برای کار با آرایه های NumPy، اما این ها برای کلاس های ویژگی و جداول هستند. با این حال، دو تابع برای تبدیل بین شطرنجی و NumPy توابع ArcPy معمولی هستند.

یک آرایه NumPy برای کار با مجموعه داده های بسیار بزرگ طراحی شده است. NumPy یک بسته پایتون است که برای محاسبات علمی با پایتون استفاده می شود. NumPy مخفف “Python عددی” است و معمولاً به صورت NUM-pie تلفظ می شود، اما گاهی اوقات به صورت NUM-pee تلفظ می شود. در میان چیزهای دیگر، NumPy یک شی آرایه n بعدی قدرتمند ارائه می دهد. این نوع شی انتقال داده ها را بین پایگاه های داده امکان پذیر می کند. به عنوان مثال، بسته SciPy شامل الگوریتم‌های متعددی است که ممکن است برای یک برنامه کاربردی مفید باشد، مانند تبدیل فوریه، مدل‌های حداکثر آنتروپی، و پردازش تصویر چند بعدی، برای نام بردن از چند بعدی. به جای تلاش برای ساخت یک ابزار یا مدل در ArcGIS Pro که این عملکردهای تخصصی را انجام می دهد، می توانید اسکریپتی بنویسید که یک رستر را به یک آرایه NumPy تبدیل می کند و سپس توابع تخصصی را از بسته SciPy فراخوانی می کند. یک اسکریپت عمومی به صورت زیر خواهد بود:

واردات کمان

وارداتی

از واردات arcpy.sa *

inRaster = arcpy.Raster(“C:/Raster/myraster”)

my_array = RasterToNumPyArray(inRaster)

outarray = scipy.<module>.<function>(my_array)

outraster = NumPyArrayToRaster(outarray)

outraster.save (“C:/Raster/result”)

این یک مثال ساده شده است و به یک تابع عمومی SciPy ارجاع می دهد، با این حال نشان می دهد که چگونه توابع آرایه NumPy می توانند برای صادرات داده ها برای پردازش با بسته دیگری و وارد کردن نتیجه به یک قالب سازگار با ArcGIS Pro – همه در یک اسکریپت پایتون استفاده شوند. .

آرایه‌های NumPy علاوه بر پشتیبانی از توابع تخصصی، برای کارهای ساده‌تر برای بهبود عملکرد نیز استفاده می‌شوند. آرایه های NumPy در حافظه خوانده می شوند که پردازش آنها را بسیار سریع می کند. به عنوان مثال، اسکریپت زیر آمار توصیفی اولیه یک رستر را پس از تبدیل شطرنجی به آرایه NumPy تعیین می کند:

واردات کمان

وارد کردن numpy

شطرنجی = “C:/Raster/Elevation”

آرایه = arcpy.RasterToNumPyArray(raster)

print(array.min())

print(array.max())

print(array.mean())

print(array.std())

همین آمار اولیه را نیز می توان مستقیماً به عنوان ویژگی های شی شطرنجی به دست آورد، به شرح زیر:

واردات کمان

dem = arcpy.Raster(“C:/Raster/elevation”)

چاپ (دم. حداقل)

چاپ (دم. حداکثر)

چاپ (dem.mean)

چاپ (dem.standardDeviation)

اگرچه هر دو راه حل آمار یکسانی را تولید می کنند، کار با آرایه های NumPy معمولا سریعتر است. علاوه بر این، NumPy شامل بسیاری از توابع دیگر است که هیچ معادل مستقیمی در ArcPy ندارند – برای مثال، میانه و واریانس.

در برخی موارد، می‌توانید بدون تکیه بر توابع تبدیل ArcGIS، مستقیماً در NumPy، رستر و سایر مجموعه‌های داده را بخوانید. مثالی از مجموعه داده elevation در قالب ASCII را در نظر بگیرید. این فایل متنی از نوع خاصی از قالب بندی پیروی می کند. ASCII یک فرمت رایج برای انتقال داده ها بین برنامه ها و پلتفرم های مختلف است. این نوع فایل را می توان با استفاده از ابزار ASCII به Raster در ArcGIS Pro به یک مجموعه داده شطرنجی تبدیل کرد، اما همچنین می تواند مستقیماً با استفاده از آرایه NumPy خوانده شود.numpy.loadtext()عملکرد. هنگامی که در یک ویرایشگر متن باز می شود، یک فایل ASCII معمولی که داده های شطرنجی را نشان می دهد مانند شکل به نظر می رسد.

 

شش سطر اول اطلاعات هدر را نشان می‌دهند که شامل تعداد ستون‌ها و ردیف‌ها، مختصات x,y گوشه سمت چپ پایین سلول سمت چپ پایین، اندازه سلول و مقدار NoData است. هنگام خواندن فایل ASCII، این شش خط اول نباید بخشی از مقادیر واقعی ارتفاع باشد. می توانید استفاده کنیداسکیپرهااستدلال ازnumpy.loadtxt()تابع پرش از شش ردیف اول به صورت زیر است:

وارد کردن numpy

infile = “C:/Project/dem.asc”

آرایه = numpy.loadtxt (infile, skiprows=6)

print array.min()

print array.max()

print array.mean()

print array.std()

توجه داشته باشید:این یک نسخه ساده شده از یک اسکریپت برای خواندن شطرنجی ASCII در NumPy است. برای خواندن اطلاعات هدر و در نظر گرفتن مقادیر NoData در صورت وجود در داده ها، کد اضافی مورد نیاز است.

توانایی کار با مجموعه داده های شطرنجی با استفاده از NumPy و SciPy امکان دسترسی به بسیاری از تجزیه و تحلیل های اضافی را فراهم می کند.

 

نکاتی که باید به خاطر بسپارید

  • ArcPy شاملsa(تحلیلگر فضایی) وarcpy.iaماژول های (Image Analyst) که دسترسی به بسیاری از ابزارهای پردازش جغرافیایی را برای کار با تصاویر و داده های شطرنجی فراهم می کند.
  • درشطرنجیکلاس ArcPy برای ارجاع به مجموعه داده شطرنجی استفاده می شود. اشیاء شطرنجی هنگام کار با مجموعه داده های شطرنجی در اسکریپت نویسی پایتون مهم هستند زیرا به طور گسترده به عنوان ورودی و خروجی ابزارهای پردازش جغرافیایی و عبارات جبر نقشه استفاده می شوند.
  • ArcPy شامل چندین توابع برای کار با داده های شطرنجی است. درتوصیف کردن()وDescribe()توابع مجموعه داده های شطرنجی و باندهای شطرنجی را توصیف می کنند. درListRasters()تابع رسترها را در یک فضای کاری فهرست می کند.
  • درsaوarcpy.iaماژول ها تجزیه و تحلیل شطرنجی و جبر نقشه را در محیط پایتون ادغام می کنند. ماژول‌ها علاوه بر دسترسی به تمام ابزارهای جعبه ابزار Spatial Analyst و Image Analyst، دارای چندین عملگر جبر نقشه هستند که اسکریپت‌نویسی با شطرنجی را کارآمدتر می‌کنند.
  • درsaوarcpy.iaماژول ها همچنین شامل چندین کلاس هستند که عمدتاً برای تعریف پارامترهای خاص منحصر به ابزارهای شطرنجی استفاده می شوند.
  • Rester Cell Iterator امکان تکرار در تمام سلول های یک یا چند رستر را فراهم می کند. سلول ها با مکانشان در شطرنجی با استفاده از یک سیستم نمایه سازی متشکل از جفت سطر و ستون ارجاع داده می شوند. شما می توانید مقادیر سلول شطرنجی را بخوانید و بنویسید، که سطح دقیقی از کنترل را ارائه می دهد که در ابزارهای پردازش جغرافیایی یافت نمی شود.
  • توابع شطرنجی در ArcGIS Pro عملیاتی هستند که پردازش را مستقیماً روی سلول‌های مجموعه داده‌های شطرنجی بدون نوشتن یک رستر جدید روی دیسک اعمال می‌کنند. بسیاری از توابع شطرنجی نیز به عنوان توابع موجود هستندsaوarcpy.ia، که عملکرد اضافی را برای پردازش و تجزیه و تحلیل داده های شطرنجی فراهم می کند. این قابلیت شامل چندین عملکرد تخصصی است که به عنوان ابزارهای پردازش جغرافیایی در دسترس نیستند.
  • توابع تبدیل برای صادر کردن رستر به آرایه NumPy در دسترس هستند، که استفاده از توابع تجزیه و تحلیل از سایر بسته‌های پایتون را ممکن می‌سازد.

شرایط کلیدی

  • ASCII
  • سلول
  • فشرده سازی
  • شطرنجی پیوسته
  • شطرنجی گسسته
  • سرتیتر
  • تصویرسازی
  • جبر نقشه
  • عملگر جبر نقشه
  • مجموعه داده موزاییک
  • شطرنجی چند باندی
  • محله
  • آرایه NumPy
  • پیکسل
  • شطرنجی
  • گروه شطرنجی
  • تکرار کننده سلول شطرنجی (IRC)
  • مجموعه داده شطرنجی
  • تابع شطرنجی
  • تکرار کننده شطرنجی
  • جدول remap
  • شطرنجی تک باندی
  • رزولوشن فضایی

سوالات را مرور کنید

  • a چیستشطرنجیشی، و چرا عملیات ژئوپردازش و نقشه عبارات جبر با استفاده از شطرنجی اغلب به خروجی های موقت منجر می شود؟
  • کدام توابع برای کار با رسترها بخشی از آن هستندsaوarcpy.iaماژول ها، و کدام توابع توابع ArcPy معمولی هستند؟
  • تفاوت بین مجموعه داده های شطرنجی و باندهای شطرنجی چیست و چگونه این تفاوت ها بر نحوه دسترسی به ویژگی های آنها با استفاده از پایتون تأثیر می گذارد؟
  • برخی از مزایای استفاده از عبارات جبر نقشه در اسکریپت پایتون به جای ابزارهای پردازش جغرافیایی معادل برای انجام همان کار چیست؟
  • چند نمونه از استفاده از جبر نقشه با استفاده از پایتون برای کار با رسترها را ذکر کنید.
  • مراحل انجام طبقه بندی مجدد مجموعه داده های شطرنجی را با استفاده از پایتون شرح دهید.
  • توضیح دهید که چگونه از Raster Cell Iterator برای اصلاح یک مجموعه داده شطرنجی استفاده می شود و چه عملکردی را ارائه می دهد که از طریق ابزارهای پردازش جغرافیایی در دسترس نیست.
  • تفاوت بین توابع شطرنجی در ArcGIS Pro و توابع معادل آنها در چیست؟saیاarcpy.ia?

 

بدون دیدگاه

دیدگاهتان را بنویسید