Animasi Peta Tutupan Lahan IKN Menggunakan R

Author
Affiliation

Defani Arman Alfitriansyah

Fakultas Kehutanan dan Lingkungan, Universitas Kuningan

Published

April 14, 2026


1 Pendahuluan

Tutorial ini memandu pembaca dalam membangun animasi perubahan tutupan lahan (Land Use/Land Cover — LULC) menggunakan data MapBiomas Indonesia untuk kawasan Ibu Kota Nusantara (IKN) pada rentang waktu 1990 hingga 2024.

Pendekatan ini memanfaatkan ekosistem paket R modern yang saling terintegrasi:

Table 1: Paket R yang digunakan dalam tutorial ini
Paket Fungsi Utama
terra Pembacaan, proyeksi ulang, dan agregasi raster multitemporal
ggplot2 Visualisasi spasial berbasis Grammar of Graphics
tidyr + dplyr Transformasi data tabular dari format wide ke long
gganimate Penambahan dimensi waktu melalui animasi berbasis frame

Kawasan IKN merupakan salah satu area dengan dinamika tutupan lahan yang sangat tinggi, terutama akibat konversi hutan dan mangrove, sehingga menjadi objek studi yang relevan secara ekologis dan kebijakan.


2 Persiapan Lingkungan Kerja

2.1 Instalasi Paket

Pastikan seluruh paket yang diperlukan telah terpasang sebelum menjalankan skrip. Jalankan blok kode berikut sekali di konsol R:

install.packages(c("terra", "ggplot2", "tidyr", "dplyr", "gganimate"))

Catatan: gganimate memerlukan renderer seperti gifski atau av. Instal gifski untuk output GIF:

install.packages("gifski")

2.2 Memuat Paket

library(terra)
library(ggplot2)
library(tidyr)
library(dplyr)
library(gganimate)

3 Data MapBiomas

3.1 Tentang Data

Data yang digunakan berasal dari MapBiomas Indonesia — sebuah platform pemantauan tutupan lahan tahunan berbasis Google Earth Engine. Setiap piksel pada raster LULC mewakili kelas tutupan lahan dengan kode numerik tertentu.

Data tersedia dalam format .tif per tahun dengan penamaan konsisten:

MapBiomas_LULC_1990.tif
MapBiomas_LULC_1995.tif
...
MapBiomas_LULC_2024.tif

Sesuaikan direktori "D:/MapBiomas/" dengan lokasi penyimpanan data Anda.

3.2 Kamus Kelas Tutupan Lahan

Langkah pertama adalah mendefinisikan kamus warna dan label kelas yang akan digunakan secara konsisten di seluruh visualisasi. Keputusan ini penting karena peta kelas tutupan lahan bergantung sepenuhnya pada konsistensi pemetaan kode numerik ke warna dan label semantik yang bermakna. Berikut merupakan simbologi warna MapBiomas:

Kelas Tutupan dan Penggunaan Lahan Mapbiomas Indonesia
# Pemetaan kode kelas ke warna HEX
warna <- c(
  "3"  = "#1f8d49",  # Formasi Hutan
  "5"  = "#04381d",  # Mangrove
  "76" = "#2f7360",  # Rawa Gambut
  "13" = "#d89f5c",  # Non-Hutan
  "40" = "#c71585",  # Sawah
  "35" = "#9065d0",  # Sawit
  "9"  = "#7a5900",  # Kebun Kayu
  "21" = "#ffefc3",  # Pertanian Lain
  "30" = "#9c0027",  # Tambang
  "24" = "#d4271e",  # Permukiman
  "25" = "#db4d4f",  # Non-Vegetasi
  "31" = "#091077",  # Tambak
  "33" = "#2532e4",  # Air
  "27" = "#ffffff"   # Awan
)

# Label deskriptif per kelas
label <- c(
  "3"  = "Formasi Hutan",  "5"  = "Mangrove",       "76" = "Rawa Gambut", 
  "13" = "Non-Hutan",      "40" = "Sawah",           "35" = "Sawit", 
  "9"  = "Kebun Kayu",     "21" = "Pertanian Lain",  "30" = "Tambang", 
  "24" = "Permukiman",     "25" = "Non-Vegetasi",    "31" = "Tambak", 
  "33" = "Air",            "27" = "Awan"
)

Penjelasan: Pemilihan warna mengikuti konvensi MapBiomas Indonesia untuk memudahkan interpretasi lintas studi. Kelas vegetasi menggunakan spektrum hijau (kode 3, 5, 76), kelas pertanian menggunakan spektrum hangat, dan kelas air/tambak menggunakan spektrum biru.


4 Pemrosesan Data Spasial

4.1 Alur Pemrosesan

Pipeline pemrosesan raster dilakukan dalam satu alur pipe yang ringkas namun mencakup beberapa operasi penting:

Baca Raster → Proyeksi Ulang → Agregasi → Konversi ke DataFrame → Transformasi Long-format
# Vektor tahun yang tersedia
tahun <- c("1990", "1995", "2000", "2005", "2010", "2015", "2020", "2024")

# Pipeline pemrosesan spasial dan transformasi tabular
df <- rast(paste0("D:/MapBiomas/MapBiomas_LULC_", tahun, ".tif")) |> 
  
  # Proyeksi ulang ke UTM Zona 50S (WGS 84)
  # method = "near" digunakan karena data kategorik (bukan kontinu)
  project("EPSG:32650", method = "near") |> 
  
  # Agregasi piksel 3x3 dengan fungsi modus
  # Tujuan: mereduksi ukuran data tanpa mengubah kelas dominan
  aggregate(fact = 3, fun = "modal") |> 
  
  # Beri nama layer sesuai tahun
  setNames(tahun) |> 
  
  # Konversi ke data.frame dengan koordinat (x, y)
  as.data.frame(xy = TRUE, na.rm = TRUE) |> 
  
  # Ubah dari format wide ke long agar kompatibel dengan ggplot2
  pivot_longer(
    cols      = -c(x, y), 
    names_to  = "Tahun", 
    values_to = "Kelas"
  ) |> 
  
  # Pastikan urutan tahun benar dan kelas sebagai karakter
  mutate(
    Tahun = factor(Tahun, levels = tahun), 
    Kelas = as.character(Kelas)
  )

4.2 Penjelasan Setiap Langkah

rast(paste0(...))
Membaca seluruh raster tahun sekaligus sebagai objek SpatRaster multilayer menggunakan fungsi rast() dari paket terra [@hijmans2026terra].

project("EPSG:32650", method = "near")
Proyeksi ulang ke sistem koordinat UTM Zona 50N agar satuan sumbu peta dalam meter (bukan derajat). Parameter method = "near" (nearest-neighbor) wajib digunakan untuk data kategorik karena tidak melakukan interpolasi nilai — sebuah prinsip dasar dalam resampling data tutupan lahan.

aggregate(fact = 3, fun = "modal")
Menggabungkan setiap blok 3×3 piksel menjadi 1 piksel dengan nilai modus (kelas yang paling sering muncul). Ini menurunkan resolusi spasial untuk mempercepat rendering animasi, sekaligus mempertahankan representasi kelas dominan.

pivot_longer()
Mengubah struktur data dari format wide (satu kolom per tahun) ke long (satu baris per kombinasi piksel–tahun). Format ini diperlukan oleh gganimate untuk menganimasikan dimensi waktu [@wickham2026tidyr].


5 Visualisasi dan Animasi

5.1 Membangun Plot Dasar

p_anim <- ggplot(df, aes(x = x, y = y, fill = Kelas)) +
  
  # Render piksel sebagai raster (lebih efisien dari geom_tile untuk data besar)
  geom_raster() +
  
  # Skala warna dan label legend dari kamus yang telah didefinisikan
  scale_fill_manual(
    name       = "Tutupan Lahan", 
    values     = warna, 
    labels     = label, 
    na.translate = FALSE
  ) +
  
  # Rasio aspek tetap agar tidak terdistorsi
  coord_fixed(expand = FALSE) + 
  
  # Label judul dinamis — {current_frame} diisi otomatis oleh gganimate
  labs(
    title    = "Tutupan Lahan IKN — {current_frame}", 
    subtitle = "Sumber: MapBiomas Indonesia Koleksi 3",
    x        = "Easting (m)", 
    y        = "Northing (m)",
    caption  = "Proyeksi: WGS 84 / UTM Zone 50N (EPSG:32650)"
  ) +
  
  theme_bw(base_size = 11) +
  theme(
    legend.position  = "right",
    legend.key.size  = unit(0.4, "cm"),
    plot.title       = element_text(face = "bold"),
    axis.text        = element_text(size = 7)
  ) +
  
  # Transisi antar frame berdasarkan kolom Tahun
  transition_manual(Tahun)

5.2 Render dan Ekspor Animasi

# Render ke objek GIF
anim_gif <- animate(
  p_anim, 
  nframes  = length(tahun),   # 1 frame per tahun
  fps      = 1.5,             # Kecepatan: 1.5 frame/detik
  width    = 800, 
  height   = 600,
  renderer = gifski_renderer()
)

# Tampilkan animasi di viewer
anim_gif

# Simpan sebagai file GIF
anim_save("lulc_ikn_1990_2024.gif", animation = anim_gif)

Tips: Untuk output video MP4, gunakan av_renderer() dari paket av:

animate(p_anim, ..., renderer = av_renderer("lulc_ikn.mp4"))

6 Interpretasi Hasil

Animasi yang dihasilkan memvisualisasikan trajektori perubahan tutupan lahan di kawasan IKN selama lebih dari tiga dekade. Beberapa pola yang dapat diidentifikasi secara visual antara lain:

  • Fragmentasi hutan (kode 3, hijau muda) seiring waktu, terutama di area transisi menuju permukiman
  • Penurunan tutupan mangrove (kode 5, hijau tua) yang dapat dikaitkan dengan ekspansi tambak (kode 31)
  • Peningkatan kelas permukiman (kode 24) sejalan dengan perkembangan infrastruktur IKN
  • Dominasi sawit (kode 35) sebagai kelas non-hutan yang signifikan di Kalimantan Timur

7 Penutup

Tutorial ini mendemonstrasikan integrasi alur kerja analisis spasial dan visualisasi dinamis dalam satu pipeline R yang kohesif. Pendekatan ini dapat diadaptasi untuk:

  • Kawasan studi lain (misalnya Delta Mahakam, Teluk Balikpapan)
  • Kelas tutupan lahan yang lebih spesifik (misalnya isolasi kelas mangrove saja)
  • Analisis kuantitatif lanjutan seperti matriks transisi atau perhitungan laju deforestasi

8 Referensi

Pedersen, T. L., & Robinson, D. (2025). gganimate: A grammar of animated graphics (R package version 1.0.11.9000). https://gganimate.com

Hijmans, R., Brown, A., & Barbosa, M. (2026). terra: Analisis data spasial (R package version 1.9-19). https://rspatial.org

Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2026). dplyr: A grammar of data manipulation (R package version 1.2.1). https://dplyr.tidyverse.org

Wickham, H., Vaughan, D., & Girlich, M. (2026). tidyr: Tidy messy data (R package version 1.3.2). https://tidyr.tidyverse.org

Wickham, H. (2016). ggplot2: Elegant graphics for data analysis. Springer-Verlag New York.