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.


#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.
- Buka berkas
metadata.txt. Bagian pentingnya:
[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-kphAlamat 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).
- Buka
__init__.py. Isinya hanya satu fungsi:
def classFactory(iface):
from .ringkas_kph import RingkasKPH
return RingkasKPH(iface)- Buka
ringkas_kph.py. Pekerjaan hitung dipisah dari urusan tombol supaya mudah diuji:
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- Di kelas yang sama,
initGuimembuat tombol danunloadmembersihkannya:
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- Pasang plugin: salin folder
plugin_ringkas_kphke 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. - Buka Plugins ► Manage and Install Plugins, tab Installed, lalu centang Ringkas KPH. [CEK]
- Muat
Petak_KPH.gpkgdaripaket-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).
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))- Simpan kode di berkas
ringkas.pyt. [CEK: cocokkan dengan ArcGIS Pro Anda] - Di panel Catalog, sambungkan folder berisi
ringkas.pyt, lalu buka alat Ringkas layer. - 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.xmluntuk 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]
- Buka Python Add-In Wizard, pilih produk ArcMap, lalu isi nama dan penulis. [CEK]
- Tambah satu Button di wizard, lalu simpan.
- Isi kode tombol di berkas Python yang dihasilkan wizard, lalu bungkus menjadi berkas add-in. [CEK]
#Cek paham
- Apa dua berkas yang wajib ada supaya QGIS mengenali sebuah folder sebagai plugin?
- Mengapa
unloadpenting? - Mengapa menu dan tombol di ArcGIS Pro tidak bisa dibuat dengan add-in Python?
Jawaban:
metadata.txtdan__init__.pyyang berisi fungsiclassFactory.unloadmembersihkan menu dan tombol saat plugin dimatikan. Tanpa itu, tombol bisa muncul ganda saat plugin dimuat ulang.- 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.txtkehilangan bidang wajib. Cek jalur folder plugin profil dan lengkapi bidangnya. - Muncul galat saat memuat.
__init__.pytidak punyaclassFactory, atau nama kelas di dalamnya keliru. Samakan nama kelas. - Tombol muncul dua kali.
unloadtidak menghapus tombol. Pasangkan setiapaddToolBarIcondenganremoveToolBarIcon. - Plugin tidak terdaftar untuk QGIS 4.
qgisMaximumVersionterlalu 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
| Hal | QGIS | ArcGIS Pro | ArcMap 10.8 |
|---|---|---|---|
| Menu dan tombol baru | Plugin Python | Add-in .NET (SDK) | Python add-in |
| Alat analisis kustom | Processing script (Bab 2) | Python toolbox, script tool | Python toolbox, script tool |
| Berkas identitas | metadata.txt | Proyek add-in .NET | config.xml (wizard) |
| Versi Python | Python 3 | Python 3 | Python 2.7 |