استفاده از توابع عبارت سفارشی پایتون (QGIS3)
عبارات در QGIS قدرت زیادی دارند و در بسیاری از ویژگیهای اصلی مورد استفاده قرار میگیرند: انتخاب، محاسبه مقادیر فیلد، استایلگذاری، برچسبگذاری و غیره. QGIS همچنین از عبارات تعریف شده توسط کاربر پشتیبانی می کند. با کمی برنامه نویسی پایتون، می توانید توابع خود را تعریف کنید که می توانند در موتور بیان استفاده شوند.
نمای کلی کار
ما یک تابع سفارشی تعریف میکنیم که شماره ناحیه UTM یک ویژگی نقشه را پیدا میکند و از این تابع برای نوشتن عبارتی استفاده میکنیم که منطقه UTM را به عنوان نوک نقشه نمایش میدهد.
خواهید گرفت
- نحوه استفاده از ابزار برای نمایش متن سفارشی هنگام قرار دادن ماوس روی یک ویژگی.
Map Tips
دریافت داده ها
ما از مجموعه داده مکان های جمعیت طبیعی زمین استفاده خواهیم کرد . مجموعه داده ساده (کمتر ستون) را دانلود کنید
ne_10m_populated_places_simple.zip
فایل را در مرورگر QGIS بیابید و آن را گسترش دهید. فایل را انتخاب کنیدne_10m_populated_places_simple.shp
و آن را روی بوم بکشید.
- به بروید یا با استفاده از یک دکمه عبارت در نوار ابزار ویژگی ها، روی Select features کلیک کنید .
- در گفتگوی Select by Expression ، به تب Function Editor بروید . در اینجا می توانید هر کد PyQGIS را که توسط موتور بیان اجرا می شود بنویسید.
- ما یک تابع سفارشی به نام تعریف می کنیم
GetUtmZone
که شماره ناحیه UTM را برای هر ویژگی محاسبه می کند. از آنجایی که توابع سفارشی در QGIS در سطح ویژگی کار می کنند. ما از مرکز هندسه ویژگی استفاده می کنیم و منطقه UTM را از عرض و طول جغرافیایی هندسه مرکز محاسبه می کنیم. همچنین طرح “N” یا “S” را به این ناحیه اضافه می کنیم تا مشخص کنیم که منطقه در نیمکره شمالی یا جنوبی است. دکمه + را در سمت چپ پایین صفحه فشار دهید وutm_zones.py
نام فایل را تایپ کنید. میتوانید روی برچسب Help در پانل پایین کلیک کنید تا آن را ببندید و پانل کد را گسترش دهید.
- نواحی UTM نواحی طرح ریزی طولی هستند که از ۱ تا ۶۰ شماره گذاری شده اند. هر ناحیه UTM 6 درجه عرض دارد. در اینجا ما از یک فرمول ریاضی ساده برای یافتن ناحیه مناسب برای مقدار طول جغرافیایی معین استفاده می کنیم. این فرمول برای همه به جز چند منطقه خاص UTM کار می کند . کد زیر را در پنجره ویرایشگر تایپ کنید. وقتی کارتان تمام شد، روی Save and Load Functions کلیک کنید .
import math from qgis.core import * from qgis.gui import * @qgsfunction(args=0, group='Custom', usesgeometry=True) def GetUtmZone(value1, feature, parent): """Return the UTM Zone of the feature's geometry as a String""" centroid = feature.geometry() longitude = centroid.asPoint().x() latitude = centroid.asPoint().y() zone_number = math.floor(((longitude + 180) / 6) % 60) + 1 if latitude >= 0: zone_letter = 'N' else: zone_letter = 'S' return '%d%s' % (int(zone_number), zone_letter)
توجه داشته باشید
در حال حاضر هیچ راهی برای حذف یک فایل عبارت از رابط کاربری گرافیکی وجود ندارد. اگر می خواهید utm_zone.py
فایل را حذف کنید، می توانید به و فایل را از حذف کنید .
- در گفتگوی Select by expression به تب Expression بروید. گروه Custom را در بخش Functions پیدا کرده و گسترش دهید . شما متوجه یک تابع سفارشی جدید
GetUtmZone
در لیست خواهید شد. اکنون میتوانیم مانند هر تابع دیگری از این تابع در عبارات استفاده کنیم. عبارت زیر را در ویرایشگر تایپ کنید. این عبارت تمام نقاطی را که در ناحیه UTM قرار دارند انتخاب می کند۳۳N
. روی Zoom to Features کلیک کنید و نقشه تغییر می کند، اگر روی Select Features کلیک کنید ، باید نقاط موجود در UTM zone 33N را به رنگ زرد ببینید.
GetUtmZone() = '33N'
توجه داشته باشید
به دلیل یک اشکال، این ویژگی در نسخه های قبلی QGIS 3 کار نمی کرد. از نسخه ۳٫۴٫۵ به بعد رفع شده است.
- در پنجره اصلی QGIS، باید برخی از نقاط را با رنگ زرد مشخص کنید. اینها نقاطی هستند که در ناحیه UTM که در عبارت مشخص کردیم قرار می گیرند.
- دیدید که چگونه ما یک تابع سفارشی را برای انتخاب ویژگی ها بر اساس عبارت تعریف و استفاده کردیم. اکنون از همان تابع در زمینه دیگری استفاده خواهیم کرد. یکی از جواهرات پنهان در QGIS ابزار Map Tip است . این ابزار زمانی که ماوس را روی یک ویژگی نگه می دارید، متن تعریف شده توسط کاربر را نشان می دهد. روی لایه کلیک راست کرده
ne_10m_populated_places_simple
و Properties را انتخاب کنید. - به تب Display بروید. در اینجا می توانید هر متنی را که با نگه داشتن ماوس روی ویژگی های لایه نمایش داده می شود را وارد کنید. حتی بهتر از آن، می توانید از مقادیر و عبارات فیلد لایه برای تعریف پیام بسیار مفیدتر استفاده کنید. روی دکمه Ɛ کلیک کنید .
- دوباره ویرایشگر عبارت آشنا را خواهید دید. ما از
concat
تابع برای پیوستن به مقدار فیلدname
و نتیجه تابع سفارشی خود استفاده خواهیم کردGetUtmZone
. عبارت زیر را وارد کرده و روی OK کلیک کنید .concat("name",' | UTM Zone: ', GetUtmZone())
- عبارتی را خواهید دید که به عنوان مقدار متن Display وارد شده است. روی Insert کلیک کنید تا آن را به کادر HTML اضافه کنید و سپس OK را فشار دهید .
- قبل از ادامه، اجازه دهید ویژگیهایی را که در مرحله قبل انتخاب شدهاند، از حالت انتخاب خارج کنیم. به بروید یا روی دکمه Deselect Features From All Layers در نوار ابزار Attribute کلیک کنید .
- ابزار را با رفتن به Show Map Tips در نوار ابزار ویژگی ها فعال کنید . یا کلیک کردن روی دکمه
Map Tips
- در هر منطقه از نقشه زوم کنید و نشانگر ماوس خود را روی هر ویژگی قرار دهید. نام شهر و منطقه UTM مربوطه را خواهید دید که به عنوان نکته نقشه نمایش داده می شود.
اگر می خواهید بازخورد بدهید یا تجربه خود را در مورد این آموزش به اشتراک بگذارید، لطفاً در زیر نظر دهید. (به حساب GitHub نیاز دارد)