BAB 1: Fondasi Modern & Manajemen Data Cerdas
#Bagian A: QGIS
#1.1. Menarik Citra Satelit via STAC API (Tanpa Download)
Spatiotemporal Asset Catalog (STAC) adalah standar modern pencarian data spasial. QGIS 4.x dapat membaca format ini dengan sangat baik.
#A. Langkah Eksekusi (Cara Visual):
- Buka QGIS. Pastikan Anda telah memasang plugin STAC API Browser (cari di Plugins > Manage and Install Plugins).
- Tampilkan batas konsesi atau area kajian Anda di kanvas peta.
- Buka ikon STAC API Browser di toolbar.
+---------------------------------------------------------+
| π°οΈ STAC API BROWSER |
| ------------------------------------------------------- |
| Connection : [ Earth Search (AWS) / Microsoft Planetary]|
| Collection : [ Sentinel-2 Level-2A (Surface Reflectance)]|
| Extent : [x] Fetch from Map Canvas Extent |
| Date Range : 2026-01-01 TO 2026-03-31 |
| Cloud Cover: < 10% |
| |
| [ SEARCH ] ---> Ditemukan: 4 Scene. |
| |
| Aset Tersedia: |
| [x] B04 (Red) [ Add as Cloud Optimized GeoTIFF (COG)] |
| [x] B08 (NIR) [ Add as Cloud Optimized GeoTIFF (COG)] |
+---------------------------------------------------------+- Klik Add as COG untuk Band 4 (Merah) dan Band 8 (Inframerah Dekat).
- Citra resolusi 10m langsung muncul di layar Anda. Anda hanya men-streaming piksel yang tampil di layar, tanpa membebani penyimpanan komputer Anda.

#1.2. Standardisasi Sistem Proyeksi (Reprojecting)
Agar analisis spasial (seperti perhitungan luas dalam Hektar) akurat, data tidak boleh berada dalam sistem derajat/geografis (WGS 84 / EPSG:4326). Pastikan kanvas proyek memakai sistem metrik/proyeksi seperti Universal Transverse Mercator (UTM).
#A. Langkah Eksekusi:
- Klik kode EPSG di sudut kanan bawah antarmuka QGIS (misal: EPSG:4326).
- Jendela Project Properties - CRS akan terbuka.
- Cari sistem UTM lokal Anda. (Contoh: Pekanbaru, Riau, berada di sekitar bujur 101Β° BT sehingga masuk zona 47; Pontianak, Kalimantan Barat, di sekitar bujur 109Β° BT sehingga masuk zona 49. Nomor zona dihitung dari bujur: (bujur + 180) Γ· 6, dibulatkan ke atas. Pilih belahan Utara (N) untuk area di utara ekuator dan belahan Selatan (S) untuk area di selatan ekuator. Misalnya WGS 84 / UTM zone 49N = EPSG:32649, dan WGS 84 / UTM zone 49S = EPSG:32749).
- Klik Apply.

#1.3. Memuat Data Latar Belakang Cepat (XYZ Tiles)
Lupakan plugin berat untuk memuat peta dasar. QGIS 4.x sudah memiliki fitur native di panel Browser.
- Buka panel Browser di sisi kiri.
- Cari menu XYZ Tiles.
- Klik kanan > New Connection.
- Masukkan nama: EOX Sentinel-2 Cloudless.
- Masukkan URL:
https://tiles.maps.eox.at/wmts/1.0.0/s2cloudless-2024_3857/default/g/{z}/{y}/{x}.jpg[CEK] - Seret EOX Sentinel-2 Cloudless ke panel layer. Ini sangat berguna untuk validasi batas area tebangan atau kebun secara visual. Cantumkan atribusi EOX pada hasil kerja Anda (lihat catatan lisensi di akhir bagian ini).

#1.4. Eksekusi Tingkat Lanjut: Otomatisasi dengan PyQGIS 3
Bagi analis tingkat mahir, mengeklik menu berulang kali adalah pemborosan waktu. Anda bisa memakai Python Console (PyQGIS) untuk memuat layer STAC, mengatur simbologi NDVI, dan memotong citra secara otomatis.
Skenario Python: Anda ingin menghitung Normalized Difference Vegetation Index (NDVI) secara on-the-fly dari URL citra COG di cloud, lalu memotongnya sesuai batas Vektor Area Kajian.

Buka Plugins > Python Console dan jalankan skrip berikut:
# [SKRIP 1.1: Memuat COG & Eksekusi NDVI Virtual di QGIS 4.x]
# Penulis: Badar Mubarok Yogaswara
# Syarat: Pastikan layer batas area (misal: 'Batas_KPH') aktif di QGIS.
import processing
from qgis.core import QgsProject, QgsRasterLayer
print("π Memulai koneksi ke Cloud-Optimized GeoTIFF (COG)...")
# 1. Tentukan URL COG dari STAC API (Contoh URL dummy Sentinel-2)
url_b4 = "/vsicurl/https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/2026/T48M/B04.tif"
url_b8 = "/vsicurl/https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/2026/T48M/B08.tif"
# 2. Muat Layer secara Virtual
layer_b4 = QgsRasterLayer(url_b4, "B04_Red_Cloud", "gdal")
layer_b8 = QgsRasterLayer(url_b8, "B08_NIR_Cloud", "gdal")
if not layer_b4.isValid() or not layer_b8.isValid():
print("β Gagal memuat citra dari Cloud. Cek koneksi internet.")
else:
QgsProject.instance().addMapLayers([layer_b4, layer_b8])
print("β
Citra Red dan NIR berhasil dimuat.")
# 3. Ambil layer Vektor untuk batas pemotongan
batas_kph = QgsProject.instance().mapLayersByName('Batas_KPH')[0]
# 4. Potong (Clip) Citra langsung dari Cloud menggunakan Algoritma Native GDAL
print("βοΈ Memotong citra berdasarkan batas KPH...")
# Clip Band 8 (NIR)
clip_b8 = processing.run("gdal:cliprasterbymasklayer", {
'INPUT': layer_b8,
'MASK': batas_kph,
'CROP_TO_CUTLINE': True,
'OUTPUT': 'TEMPORARY_OUTPUT'
})['OUTPUT']
# Clip Band 4 (Red)
clip_b4 = processing.run("gdal:cliprasterbymasklayer", {
'INPUT': layer_b4,
'MASK': batas_kph,
'CROP_TO_CUTLINE': True,
'OUTPUT': 'TEMPORARY_OUTPUT'
})['OUTPUT']
# 5. Kalkulasi NDVI Menggunakan Raster Calculator Native
# Rumus: (NIR - RED) / (NIR + RED)
print("π Menghitung NDVI...")
ndvi_result = processing.run("qgis:rastercalculator", {
'EXPRESSION': '("B08@1" - "B04@1") / ("B08@1" + "B04@1")',
'LAYERS': [clip_b8, clip_b4],
'CELLSIZE': 10,
'OUTPUT': 'memory:NDVI_KPH'
})
QgsProject.instance().addMapLayer(ndvi_result['OUTPUT'])
print("π Selesai! Layer NDVI_KPH telah ditambahkan ke kanvas.")Skrip alternatif (memakai native:rastercalc):
# [SKRIP 1.1 - ALTERNATIF: Memuat COG & Eksekusi NDVI di QGIS 4.x]
# Penulis: Badar Mubarok Yogaswara
# Syarat: Pastikan layer batas area (misal: 'Batas_KPH') aktif di QGIS.
# Perbedaan dengan Skrip 1.1: langkah 5 memakai native:rastercalc (terdokumentasi) dan hasilnya
# disimpan ke berkas sementara lalu dimuat sebagai layer. Keluaran 'memory:' tidak menghasilkan layer raster.
import processing
from qgis.core import QgsProject, QgsRasterLayer
print("π Memulai koneksi ke Cloud-Optimized GeoTIFF (COG)...")
# 1. Tentukan URL COG dari STAC API (Contoh URL dummy Sentinel-2)
url_b4 = "/vsicurl/https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/2026/T48M/B04.tif"
url_b8 = "/vsicurl/https://sentinel-cogs.s3.us-west-2.amazonaws.com/sentinel-s2-l2a-cogs/2026/T48M/B08.tif"
# 2. Muat Layer secara Virtual
layer_b4 = QgsRasterLayer(url_b4, "B04_Red_Cloud", "gdal")
layer_b8 = QgsRasterLayer(url_b8, "B08_NIR_Cloud", "gdal")
if not layer_b4.isValid() or not layer_b8.isValid():
print("β Gagal memuat citra dari Cloud. Cek koneksi internet.")
else:
QgsProject.instance().addMapLayers([layer_b4, layer_b8])
print("β
Citra Red dan NIR berhasil dimuat.")
# 3. Ambil layer Vektor untuk batas pemotongan
batas_kph = QgsProject.instance().mapLayersByName('Batas_KPH')[0]
# 4. Potong (Clip) Citra langsung dari Cloud menggunakan Algoritma Native GDAL
print("βοΈ Memotong citra berdasarkan batas KPH...")
# Clip Band 8 (NIR)
clip_b8 = processing.run("gdal:cliprasterbymasklayer", {
'INPUT': layer_b8,
'MASK': batas_kph,
'CROP_TO_CUTLINE': True,
'OUTPUT': 'TEMPORARY_OUTPUT'
})['OUTPUT']
# Clip Band 4 (Red)
clip_b4 = processing.run("gdal:cliprasterbymasklayer", {
'INPUT': layer_b4,
'MASK': batas_kph,
'CROP_TO_CUTLINE': True,
'OUTPUT': 'TEMPORARY_OUTPUT'
})['OUTPUT']
# 5. Kalkulasi NDVI Menggunakan Raster Calculator Native
# Rumus: (NIR - RED) / (NIR + RED)
print("π Menghitung NDVI...")
# Beri nama pada hasil potongan agar bisa dirujuk di ekspresi sebagai "B08@1" dan "B04@1"
lyr_b8 = QgsRasterLayer(clip_b8, "B08", "gdal")
lyr_b4 = QgsRasterLayer(clip_b4, "B04", "gdal")
QgsProject.instance().addMapLayers([lyr_b8, lyr_b4], False)
ndvi_path = processing.run("native:rastercalc", {
'EXPRESSION': '("B08@1" - "B04@1") / ("B08@1" + "B04@1")',
'LAYERS': [lyr_b8, lyr_b4],
'OUTPUT': 'TEMPORARY_OUTPUT'
})['OUTPUT']
QgsProject.instance().addMapLayer(QgsRasterLayer(ndvi_path, "NDVI_KPH", "gdal"))
print("π Selesai! Layer NDVI_KPH telah ditambahkan ke kanvas.")#Bagian B: ArcGIS Pro
#1.1. Menarik Citra Satelit via STAC (ArcGIS Pro)
Di ArcGIS Pro, dukungan STAC sudah bawaan, jadi tidak perlu plugin seperti pada QGIS. Prinsipnya sama: Anda mencari citra dari katalog di cloud lalu menambahkannya ke peta.

#A. Langkah Eksekusi:
- Buat koneksi ke STAC API memakai berkas koneksi penyimpanan cloud (cloud storage connection), seperti dijelaskan pada dokumentasi Esri "Introduction to STAC". [CEK]
- Telusuri koleksi (collections) dan item pada panel Explore STAC. [CEK]
- Pilih item yang Anda perlukan, lalu tambahkan sebagai layer ke peta (panel Contents). [CEK]
- Opsional: tambahkan item ke mosaic dataset bila akan dianalisis lebih lanjut.
#1.2. Standardisasi Sistem Proyeksi (ArcGIS Pro)
Alasannya sama dengan Bagian A: perhitungan luas dan jarak yang akurat memerlukan sistem koordinat metrik seperti UTM, bukan derajat (WGS 84 / EPSG:4326).

#A. Langkah Eksekusi:
- Buka properti peta (Map Properties) dan pilih tab sistem koordinat (Coordinate Systems). [CEK]
- Pilih zona UTM sesuai lokasi. Nomor zona dihitung dari bujur: (bujur + 180) Γ· 6, dibulatkan ke atas. Contoh: WGS 84 / UTM zone 49S = EPSG:32749, dan WGS 84 / UTM zone 49N = EPSG:32649.
- Klik OK.
- Bila data fisiknya perlu diubah, buka panel Geoprocessing, lalu pakai Project untuk data vektor atau Project Raster untuk raster (kelompok Data Management Tools). Keduanya tersedia pada semua level lisensi tanpa ekstensi.
#1.3. Memuat Data Latar Belakang (ArcGIS Pro)
- Buka galeri Basemap pada tab Map. [CEK]
- Pilih peta dasar yang tersedia, lalu periksa syarat penggunaannya.
#1.4. Eksekusi Tingkat Lanjut: Otomatisasi dengan ArcPy (Python 3)
Skenario sama dengan Bagian A: menghitung NDVI dari band Red dan NIR, setelah dipotong sesuai batas area kajian. Bedanya, skrip ini bekerja pada berkas lokal.

Buka jendela Python di ArcGIS Pro dan jalankan skrip berikut:
# [SKRIP 1.1-Pro: Memotong citra dan menghitung NDVI dengan ArcPy]
# Penulis: Badar Mubarok Yogaswara
# [CEK] Cocokkan dengan versi Anda. Butuh ekstensi Spatial Analyst atau Image Analyst.
import arcpy
from arcpy.sa import Raster, Float, ExtractByMask
arcpy.CheckOutExtension("Spatial")
arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"C:\data_kph" # ganti dengan folder Anda
# 1. Masukan: band Red, band NIR, dan batas area (CRS harus sama, lihat 1.2)
red = Raster("B04.tif")
nir = Raster("B08.tif")
batas = "Batas_KPH.shp"
# 2. Potong kedua band sesuai batas
red_clip = ExtractByMask(red, batas)
nir_clip = ExtractByMask(nir, batas)
# 3. NDVI = (NIR - RED) / (NIR + RED)
ndvi = (Float(nir_clip) - Float(red_clip)) / (Float(nir_clip) + Float(red_clip))
ndvi.save("NDVI_KPH.tif")
arcpy.CheckInExtension("Spatial")
print("Selesai: NDVI_KPH.tif tersimpan.")#Bagian C: ArcMap 10.8
#1.1. Menarik Citra Satelit (ArcMap): Tidak Ada Padanan STAC
Dokumentasi ArcMap yang diperiksa penulis tidak memuat dukungan STAC. Alternatif terdekat adalah menambahkan image service. Ini citra yang disajikan server dan ditampilkan di peta tanpa menyalin seluruh datanya.

#A. Langkah Eksekusi:
- Klik tombol Add Data.
- Pada daftar Look in, buka folder GIS Servers.
- Klik ganda server yang Anda inginkan (atau tambahkan koneksi ArcGIS Server baru bila belum ada).
- Pilih layer image service (ikonnya khas), lalu klik Add. Cara lain: seret image service dari jendela Catalog.
- Alternatif: File > Add Data > Add Data From ArcGIS Online untuk mencari citra yang dibagikan komunitas.
#1.2. Standardisasi Sistem Proyeksi (ArcMap)

#A. Langkah Eksekusi:
- Buka properti data frame dan pilih tab sistem koordinat. [CEK]
- Pilih zona UTM sesuai lokasi (rumus dan kode EPSG sama seperti Bagian B).
- Bila data fisiknya perlu diubah, pakai Project (vektor) atau Project Raster (raster) di Data Management. Keduanya tersedia pada semua level lisensi tanpa ekstensi.
#1.3. Memuat Data Latar Belakang (ArcMap)
- Pilih File > Add Data > Add Basemap. [CEK]
- Pilih peta dasar yang tersedia, lalu periksa syarat penggunaannya.
#1.4. Eksekusi Tingkat Lanjut: Otomatisasi dengan ArcPy (Python 2.7)
Skenario dan hasilnya sama dengan Bagian B, tetapi kode harus mengikuti Python 2.7.

Buka jendela Python di ArcMap dan jalankan skrip berikut:
# [SKRIP 1.1-ArcMap: Memotong citra dan menghitung NDVI dengan ArcPy]
# Penulis: Badar Mubarok Yogaswara
# [CEK] Cocokkan dengan versi Anda. Butuh ekstensi Spatial Analyst.
from __future__ import print_function # agar print() berlaku di Python 2.7
import arcpy
from arcpy.sa import Raster, Float, ExtractByMask
arcpy.CheckOutExtension("Spatial")
arcpy.env.overwriteOutput = True
arcpy.env.workspace = r"C:\data_kph" # ganti dengan folder Anda
red = Raster("B04.tif")
nir = Raster("B08.tif")
batas = "Batas_KPH.shp"
red_clip = ExtractByMask(red, batas)
nir_clip = ExtractByMask(nir, batas)
ndvi = (Float(nir_clip) - Float(red_clip)) / (Float(nir_clip) + Float(red_clip))
ndvi.save("NDVI_KPH.tif")
arcpy.CheckInExtension("Spatial")
print("Selesai: NDVI_KPH.tif tersimpan.")#Ringkasan, Latihan, dan Bantuan Bab 1
#Ringkasan
- Citra satelit dapat dibaca langsung dari cloud lewat STAC dan COG, tanpa mengunduh berkas utuh.
- Ubah CRS proyek ke sistem metrik (UTM) di awal agar luas dan jarak akurat.
- XYZ Tiles memuat peta dasar tanpa plugin tambahan.
- PyQGIS dapat memuat COG, memotong, dan menghitung NDVI dalam satu skrip.
- [ArcGIS Pro] STAC bawaan; Project dan Project Raster untuk mengubah proyeksi; ArcPy dengan Python 3.
- [ArcMap] Tidak ada padanan STAC (alternatif: image service); Project dan Project Raster; ArcPy dengan Python 2.7.
#Latihan
- Cari citra Sentinel-2 dengan tutupan awan di bawah 10% untuk area Anda, lalu muat Band 4 dan Band 8 sebagai COG.
- Tentukan zona UTM area Anda dengan rumus di langkah 1.2, lalu atur CRS proyek dan catat kode EPSG-nya.
- Jalankan skrip 1.1 dengan batas area Anda sendiri. Bagian mana pada hasil NDVI yang tampak paling hijau pekat, dan apakah sesuai dengan kenyataan di lapangan?
- [ArcGIS Pro / ArcMap] Proyeksikan satu citra dengan Project Raster. Catat metode resampling yang Anda pilih dan alasannya.
- [ArcGIS Pro / ArcMap] Jalankan Skrip 1.1 versi Anda dengan berkas B04, B08, dan batas area sendiri, lalu bandingkan hasil NDVI-nya dengan hasil di QGIS.
#Jika terjadi masalah
- Layer gagal dimuat: periksa koneksi internet dan pastikan alamat citra diawali /vsicurl/. [CEK]
- Luas area tampak tidak masuk akal: periksa apakah CRS proyek masih berupa derajat (EPSG:4326).
- [ArcGIS Pro / ArcMap] Skrip berhenti dengan galat lisensi: pastikan ekstensi Spatial Analyst (atau Image Analyst di ArcGIS Pro) tersedia untuk akun Anda. [CEK]
- [ArcMap] Skrip dari ArcGIS Pro gagal dijalankan: periksa apakah ia memakai sintaks Python 3, karena ArcMap memakai Python 2.7.
- [ArcMap] Dialog Add Basemap gagal menambahkan peta dasar: lihat catatan Masalah yang Diketahui di bagian 1.3 ArcMap.
#Tabel Perbandingan Bab 1: QGIS, ArcGIS Pro, dan ArcMap 10.8
Kolom Status menjelaskan seberapa pasti padanan itu. Terbukti: dokumentasi resmi sudah dibaca penulis. Kemungkinan: berdasarkan informasi umum. [CEK]: perlu dicoba di perangkat lunaknya.
| Langkah | QGIS | ArcGIS Pro | ArcMap 10.8 | Status |
|---|---|---|---|---|
| 1.1 Citra cloud | STAC API Browser (plugin); COG | Dukungan STAC bawaan; panel Explore STAC | Tidak ada padanan STAC; image service atau Add Data From ArcGIS Online | Pro: ada, menu [CEK]. ArcMap: tidak ada padanan langsung |
| 1.2 CRS proyek | Project Properties - CRS | Map Properties - Coordinate Systems | Data frame properties | Letak menu [CEK] |
| 1.2 Ubah proyeksi data | Reproject layer | Project; Project Raster | Project; Project Raster | Terbukti ada di Pro dan ArcMap; tanpa ekstensi |
| 1.3 Peta dasar | XYZ Tiles (panel Browser) | Galeri Basemap; XYZ murni belum terverifikasi | Add Basemap; Add Data From ArcGIS Online | Menu [CEK]; XYZ murni: tidak ada padanan yang dijamin |
| 1.4 Bahasa otomasi | PyQGIS 3 (Python 3) | ArcPy (Python 3) | ArcPy (Python 2.7) | Terbukti (versi Python) |
| 1.4 Baca cloud langsung | /vsicurl/ lewat GDAL | Belum diverifikasi | Belum diverifikasi | Belum diverifikasi |
| 1.4 Potong citra | gdal:cliprasterbymasklayer | Extract by Mask | Extract by Mask | Kemungkinan; butuh Spatial Analyst [CEK] |
| 1.4 Hitung NDVI | qgis:rastercalculator | Raster Calculator atau ekspresi arcpy.sa | Ekspresi arcpy.sa (Spatial Analyst) | Pro: Raster Calculator butuh Spatial Analyst atau Image Analyst (terbukti). ArcMap: kemungkinan |
