Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ M4
Tampilkan bagian untuk:

BAB 1: Satu Tombol untuk Satu Pekerjaan: Plugin dan Alat Kustom

#Studi kasus: "Berapa objek dan berapa hektare?"

Kepala Seksi sering bertanya hal yang sama: "Layer ini isinya berapa objek, dan luas totalnya berapa hektare?" Analis Muda sudah punya skrip tiga baris untuk menjawabnya. Tetapi tiap kali harus membuka Python Console, menempel skrip, lalu mengganti nama layer. Rekan kerja lain bahkan tidak berani menyentuh konsol. Solusinya: bungkus skrip itu menjadi satu tombol di menu QGIS.

#Konsep: plugin dalam tiga kalimat

Plugin adalah folder berisi kode Python yang dikenali QGIS, lalu muncul sebagai menu atau tombol. Bayangkan colokan tambahan di kamera: badan kameranya tetap, tetapi Anda menambah kemampuan baru tanpa membongkar mesin. QGIS sendiri tahu cara memuat dan membuang plugin, jadi Anda hanya perlu menyediakan folder dengan isi yang benar.

Ilustrasi 1.1: Isi folder plugin dan siklus hidupnya
Skema folder plugin dengan metadata, pintu masuk, isi kerja, dan ikon, serta urutan classFactory, initGui, run, unload
Ilustrasi 1.2: Tangga alat kustom
Skema tangga dari kode Python biasa, ke Processing script, lalu plugin

#Empat berkas yang harus ada

Plugin latihan buku ini bernama Ringkas KPH. Isinya empat berkas. Tiga istilah baru di sini:

  • metadata.txt: kartu identitas plugin (nama, versi, penulis).
  • classFactory: fungsi pintu masuk. QGIS memanggilnya saat memuat plugin.
  • iface: "remote control" yang diberikan QGIS ke plugin untuk mengatur menu, tombol, dan pesan.

QGIS mewajibkan bidang berikut di metadata.txt: name, qgisMinimumVersion, description, about, version, author, email, dan repository (dokumentasi PyQGIS Developer Cookbook). Plugin juga wajib punya __init__.py dengan fungsi classFactory.

#Bagian A: QGIS

#Bagian A: Plugin Ringkas KPH di QGIS

Berkas lengkap ada di skrip/plugin_ringkas_kph/. Berikut cara kerjanya.

  1. Buka berkas metadata.txt. Bagian pentingnya:
metadata.txt
[general]
name=Ringkas KPH
qgisMinimumVersion=3.34
qgisMaximumVersion=4.99
description=Menampilkan jumlah objek dan luas total layer aktif.
version=0.1.0
author=Badar Mubarok Yogaswara
email=badarmubarok@gmail.com
repository=https://example.org/ringkas-kph

Alamat example.org adalah alamat contoh, bukan repositori nyata. Bidang about juga wajib dan ada di berkas lengkap. Baris qgisMaximumVersion=4.99 menandai plugin cocok untuk QGIS 4. Penanda lama supportsQt6 sudah tidak dipakai (dokumentasi plugin QGIS tentang migrasi ke QGIS 4).

  1. Buka __init__.py. Isinya hanya satu fungsi:
__init__.py
def classFactory(iface):
    from .ringkas_kph import RingkasKPH
    return RingkasKPH(iface)
  1. Buka ringkas_kph.py. Pekerjaan hitung dipisah dari urusan tombol supaya mudah diuji:
ringkas_kph.py
def ringkas_layer(layer):
    da = QgsDistanceArea()
    da.setSourceCrs(layer.crs(), QgsCoordinateTransformContext())
    da.setEllipsoid("WGS84")
    jumlah = 0
    luas_m2 = 0.0
    for f in layer.getFeatures():
        jumlah += 1
        if layer.geometryType() == QgsWkbTypes.GeometryType.PolygonGeometry:
            luas_m2 += da.measureArea(f.geometry())
    return jumlah, luas_m2 / 10000.0
  1. Di kelas yang sama, initGui membuat tombol dan unload membersihkannya:
ringkas_kph.py
def initGui(self):
    ikon = os.path.join(os.path.dirname(__file__), "icon.png")
    self.action = QAction(QIcon(ikon), "Ringkas layer aktif", self.iface.mainWindow())
    self.action.triggered.connect(self.run)
    self.iface.addPluginToMenu("&Ringkas KPH", self.action)
    self.iface.addToolBarIcon(self.action)

def unload(self):
    self.iface.removePluginMenu("&Ringkas KPH", self.action)
    self.iface.removeToolBarIcon(self.action)
    self.action = None
  1. Pasang plugin: salin folder plugin_ringkas_kph ke folder plugin profil QGIS Anda. Di Windows, jalurnya %APPDATA%\QGIS\QGIS4\profiles\default\python\plugins. Jalur ini dicek penulis di komputer yang memakai QGIS 4.0.2.
  2. Buka Plugins ► Manage and Install Plugins, tab Installed, lalu centang Ringkas KPH. [CEK]
  3. Muat Petak_KPH.gpkg dari paket-m4, klik layernya, lalu pilih Plugins ► Ringkas KPH ► Ringkas layer aktif. Bilah pesan menampilkan: Petak_KPH: 16 objek, luas 16.00 ha.

Hasilnya: satu klik menggantikan skrip yang dulu ditempel manual.

#Alat bantu pengembang

Dua plugin bantu dikenal luas: Plugin Builder (membuat kerangka plugin) dan Plugin Reloader (memuat ulang plugin tanpa menutup QGIS). Keduanya dipasang dari Plugin Manager. [CEK: tidak dipasang penulis]

#Bagian B: ArcGIS Pro

#Bagian B: ArcGIS Pro

ArcGIS Pro membagi "alat kustom" menjadi dua jalur. Jangan tertukar.

  • Alat geoprocessing (muncul di panel Geoprocessing): ditulis dengan Python, lewat Python toolbox (.pyt) atau script tool. Ini padanan terdekat dengan Processing script (Bab 2).
  • Menu dan tombol di aplikasi (padanan plugin): hanya lewat add-in yang ditulis dengan ArcGIS Pro SDK untuk .NET dan Visual Studio. Pro tidak punya add-in Python. [CEK: dari dokumentasi pengembang Esri; tidak dicoba]

Untuk pekerjaan "hitung objek dan luas", Python toolbox sudah cukup. Sebuah berkas .pyt memuat kelas Toolbox dan kelas alat. Kelas alat minimal punya __init__ dan execute; getParameterInfo mengatur parameter (dokumentasi Esri tentang templat Python toolbox).

ringkas.pyt
import arcpy


class Toolbox:
    def __init__(self):
        self.label = "Alat KPH"
        self.alias = "alatkph"
        self.tools = [RingkasLayer]


class RingkasLayer:
    def __init__(self):
        self.label = "Ringkas layer"
        self.description = "Jumlah objek dan luas total (hektare)."

    def getParameterInfo(self):
        p = arcpy.Parameter(displayName="Layer poligon", name="layer",
                            datatype="GPFeatureLayer", parameterType="Required", direction="Input")
        return [p]

    def execute(self, parameters, messages):
        jumlah, luas = 0, 0.0
        with arcpy.da.SearchCursor(parameters[0].valueAsText, ["SHAPE@AREA"]) as kursor:
            for baris in kursor:
                jumlah += 1
                luas += baris[0]
        messages.addMessage("%d objek, luas %.2f satuan peta persegi" % (jumlah, luas))
  1. Simpan kode di berkas ringkas.pyt. [CEK: cocokkan dengan ArcGIS Pro Anda]
  2. Di panel Catalog, sambungkan folder berisi ringkas.pyt, lalu buka alat Ringkas layer.
  3. Pilih layer petak, jalankan. Pesan hasil muncul di panel pesan alat.

#Bagian C: ArcMap 10.8

#Bagian C: ArcMap 10.8

ArcMap punya dua jalur yang mirip, dan satu kelebihan: add-in Python.

  • Python add-in: dibuat dengan Python Add-In Wizard yang menghasilkan berkas config.xml untuk tombol, menu, dan alat. Ini padanan terdekat dengan plugin QGIS. [CEK: dari dokumentasi Esri]
  • Python toolbox dan script tool: sama seperti di Pro, untuk alat geoprocessing. [CEK]

Hati-hati: ArcMap 10.8 memakai Python 2.7, sedangkan QGIS 4 dan ArcGIS Pro memakai Python 3. Kode di Bagian B perlu diperiksa ulang untuk Python 2.7 sebelum dipakai di ArcMap. [CEK]

  1. Buka Python Add-In Wizard, pilih produk ArcMap, lalu isi nama dan penulis. [CEK]
  2. Tambah satu Button di wizard, lalu simpan.
  3. Isi kode tombol di berkas Python yang dihasilkan wizard, lalu bungkus menjadi berkas add-in. [CEK]

#Cek paham

  1. Apa dua berkas yang wajib ada supaya QGIS mengenali sebuah folder sebagai plugin?
  2. Mengapa unload penting?
  3. Mengapa menu dan tombol di ArcGIS Pro tidak bisa dibuat dengan add-in Python?

Jawaban:

  1. metadata.txt dan __init__.py yang berisi fungsi classFactory.
  2. unload membersihkan menu dan tombol saat plugin dimatikan. Tanpa itu, tombol bisa muncul ganda saat plugin dimuat ulang.
  3. Menurut dokumentasi pengembang Esri, add-in aplikasi Pro hanya lewat .NET. Python dipakai untuk alat geoprocessing.

#Kesalahan umum

  • Plugin tidak muncul di daftar Installed. Biasanya folder diletakkan di tempat yang salah, atau metadata.txt kehilangan bidang wajib. Cek jalur folder plugin profil dan lengkapi bidangnya.
  • Muncul galat saat memuat. __init__.py tidak punya classFactory, atau nama kelas di dalamnya keliru. Samakan nama kelas.
  • Tombol muncul dua kali. unload tidak menghapus tombol. Pasangkan setiap addToolBarIcon dengan removeToolBarIcon.
  • Plugin tidak terdaftar untuk QGIS 4. qgisMaximumVersion terlalu rendah. Naikkan ke 4.99 bila kode sudah diuji.

#Ringkasan dan latihan

Ringkasan: Plugin adalah folder Python dengan metadata.txt, __init__.py, dan kelas yang punya initGui dan unload. Pisahkan pekerjaan hitung dari urusan tombol agar mudah diuji. Di ArcGIS Pro, alat kustom lewat Python toolbox, sedangkan menu dan tombol lewat .NET.

Latihan: Ubah plugin supaya juga menampilkan luas rata-rata per objek. (Petunjuk: bagi luas total dengan jumlah objek; untuk Petak_KPH hasilnya 1,00 ha.) Lalu naikkan version menjadi 0.1.1.

#Tabel perbandingan: alat kustom di tiga perangkat

HalQGISArcGIS ProArcMap 10.8
Menu dan tombol baruPlugin PythonAdd-in .NET (SDK)Python add-in
Alat analisis kustomProcessing script (Bab 2)Python toolbox, script toolPython toolbox, script tool
Berkas identitasmetadata.txtProyek add-in .NETconfig.xml (wizard)
Versi PythonPython 3Python 3Python 2.7