استفاده از توابع عبارت سفارشی پایتون (QGIS3) 

عبارات در QGIS قدرت زیادی دارند و در بسیاری از ویژگی‌های اصلی مورد استفاده قرار می‌گیرند: انتخاب، محاسبه مقادیر فیلد، استایل‌گذاری، برچسب‌گذاری و غیره. QGIS همچنین از عبارات تعریف شده توسط کاربر پشتیبانی می کند. با کمی برنامه نویسی پایتون، می توانید توابع خود را تعریف کنید که می توانند در موتور بیان استفاده شوند.

نمای کلی کار 

ما یک تابع سفارشی تعریف می‌کنیم که شماره ناحیه UTM یک ویژگی نقشه را پیدا می‌کند و از این تابع برای نوشتن عبارتی استفاده می‌کنیم که منطقه UTM را به عنوان نوک نقشه نمایش می‌دهد.

 خواهید گرفت

  • نحوه استفاده از ابزار برای نمایش متن سفارشی هنگام قرار دادن ماوس روی یک ویژگی.Map Tips

دریافت داده ها 

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

  1. ne_10m_populated_places_simple.zipفایل را در مرورگر QGIS بیابید و آن را گسترش دهید. فایل را انتخاب کنید ne_10m_populated_places_simple.shpو آن را روی بوم بکشید.
../../_images/190.png
  1. به Edit ‣ Select ‣ Select Features By Expression… بروید یا با استفاده از یک دکمه عبارت در نوار ابزار ویژگی ها، روی Select features کلیک کنید .
../../_images/250.png
  1. در گفتگوی Select by Expression ، به تب Function Editor بروید . در اینجا می توانید هر کد PyQGIS را که توسط موتور بیان اجرا می شود بنویسید.
../../_images/329.png
  1. ما یک تابع سفارشی به نام تعریف می کنیم GetUtmZoneکه شماره ناحیه UTM را برای هر ویژگی محاسبه می کند. از آنجایی که توابع سفارشی در QGIS در سطح ویژگی کار می کنند. ما از مرکز هندسه ویژگی استفاده می کنیم و منطقه UTM را از عرض و طول جغرافیایی هندسه مرکز محاسبه می کنیم. همچنین طرح “N” یا “S” را به این ناحیه اضافه می کنیم تا مشخص کنیم که منطقه در نیمکره شمالی یا جنوبی است. دکمه + را در سمت چپ پایین صفحه فشار دهید و utm_zones.pyنام فایل را تایپ کنید. می‌توانید روی برچسب Help در پانل پایین کلیک کنید تا آن را ببندید و پانل کد را گسترش دهید.
../../_images/4.gif
  1. نواحی 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)
    

    ../../_images/513.png

توجه داشته باشید

در حال حاضر هیچ راهی برای حذف یک فایل عبارت از رابط کاربری گرافیکی وجود ندارد. اگر می خواهید utm_zone.pyفایل را حذف کنید، می توانید به تنظیمات ‣ پروفایل های کاربر ‣ پوشه پروفایل فعال را باز کنید و فایل را از python ‣ عبارات حذف کنید .

  1. در گفتگوی Select by expression به تب Expression بروید. گروه Custom را در بخش Functions پیدا کرده و گسترش دهید . شما متوجه یک تابع سفارشی جدید GetUtmZoneدر لیست خواهید شد. اکنون می‌توانیم مانند هر تابع دیگری از این تابع در عبارات استفاده کنیم. عبارت زیر را در ویرایشگر تایپ کنید. این عبارت تمام نقاطی را که در ناحیه UTM قرار دارند انتخاب می کند ۳۳N. روی Zoom to Features کلیک کنید و نقشه تغییر می کند، اگر روی Select Features کلیک کنید ، باید نقاط موجود در UTM zone 33N را به رنگ زرد ببینید.
    GetUtmZone() = '33N'
    

    ../../_images/613.png

توجه داشته باشید

به دلیل یک اشکال، این ویژگی در نسخه های قبلی QGIS 3 کار نمی کرد. از نسخه ۳٫۴٫۵ به بعد رفع شده است.

  1. در پنجره اصلی QGIS، باید برخی از نقاط را با رنگ زرد مشخص کنید. اینها نقاطی هستند که در ناحیه UTM که در عبارت مشخص کردیم قرار می گیرند.
    ../../_images/713.png
  2. دیدید که چگونه ما یک تابع سفارشی را برای انتخاب ویژگی ها بر اساس عبارت تعریف و استفاده کردیم. اکنون از همان تابع در زمینه دیگری استفاده خواهیم کرد. یکی از جواهرات پنهان در QGIS ابزار Map Tip است . این ابزار زمانی که ماوس را روی یک ویژگی نگه می دارید، متن تعریف شده توسط کاربر را نشان می دهد. روی لایه کلیک راست کرده ne_10m_populated_places_simpleو Properties را انتخاب کنید.

    ../../_images/813.png

  3. به تب Display بروید. در اینجا می توانید هر متنی را که با نگه داشتن ماوس روی ویژگی های لایه نمایش داده می شود را وارد کنید. حتی بهتر از آن، می توانید از مقادیر و عبارات فیلد لایه برای تعریف پیام بسیار مفیدتر استفاده کنید. روی دکمه Ɛ کلیک کنید .

    ../../_images/913.png

  4. دوباره ویرایشگر عبارت آشنا را خواهید دید. ما از concatتابع برای پیوستن به مقدار فیلد nameو نتیجه تابع سفارشی خود استفاده خواهیم کرد GetUtmZone. عبارت زیر را وارد کرده و روی OK کلیک کنید .
    concat("name",' | UTM Zone: ', GetUtmZone())
    

    ../../_images/1017.png

  5. عبارتی را خواهید دید که به عنوان مقدار متن Display وارد شده است. روی Insert کلیک کنید تا آن را به کادر HTML اضافه کنید و سپس OK را فشار دهید .

    ../../_images/1120.png

  6. قبل از ادامه، اجازه دهید ویژگی‌هایی را که در مرحله قبل انتخاب شده‌اند، از حالت انتخاب خارج کنیم. به Edit ‣ Select ‣ Deselect Features From All Layers بروید یا روی دکمه Deselect Features From All Layers در نوار ابزار Attribute کلیک کنید .

    ../../_images/1218.png

  7. ابزار را با رفتن به View ‣ Map Tips یا کلیک کردن روی دکمه Show Map Tips در نوار ابزار ویژگی ها فعال کنید .Map Tips

    ../../_images/1316.png

  8. در هر منطقه از نقشه زوم کنید و نشانگر ماوس خود را روی هر ویژگی قرار دهید. نام شهر و منطقه UTM مربوطه را خواهید دید که به عنوان نکته نقشه نمایش داده می شود.

    ../../_images/14.gif


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


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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

خانهدربارهتماسارتباط با ما