Visualisasi Data Gempa Bumi Indonesia dengan Bahasa R

Visualisasi Data Gempa Bumi Indonesia dengan Bahasa R

Data gempa bumi merupakan informasi spasial penting yang sangat bermanfaat untuk analisis bencana, mitigasi risiko, dan edukasi publik. Salah satu sumber data gempa yang terbuka dan mudah diakses adalah dari United States Geological Survey (USGS) melalui format GeoJSON.

Dalam tutorial ini, kita akan belajar bagaimana menampilkan data gempa signifikan yang terjadi di wilayah Indonesia dalam bentuk peta interaktif, menggunakan bahasa R dengan bantuan pustaka leaflet, serta menampilkan informasi gempa melalui popup pin di lokasi kejadian.

Instalasi Paket R

Sebelum memulai visualisasi, kita perlu menginstal dan memuat beberapa pustaka yang akan digunakan:

  • sf: untuk membaca dan menangani data spasial termasuk GeoJSON
  • leaflet: untuk membuat peta interaktif berbasis web langsung dari R
  • httr: untuk mengambil data dari URL melalui HTTP
  • jsonlite: untuk memproses data dalam format JSON
  • dplyr: untuk memanipulasi dan menyaring data

Pastikan pustaka-pustaka berikut sudah terinstal

R

# Instalasi pustaka
install.packages("sf")
install.packages("leaflet")
install.packages("httr")
install.packages("jsonlite")
install.packages("dplyr")

# Memuat pustaka
library(sf)
library(leaflet)
library(httr)
library(jsonlite)
library(dplyr)

Membaca Data Gempa dari USGS

USGS (United States Geological Survey) menyediakan data gempa bumi secara terbuka melalui berbagai API yang bisa diakses dalam format GeoJSON. Data ini mencakup berbagai periode waktu dan kriteria, antara lain:

  • all_day.geojson: Semua gempa yang terjadi dalam 24 jam terakhir
  • all_week.geojson: Semua gempa selama seminggu terakhir
  • all_month.geojson: Semua gempa selama 30 hari terakhir
  • significant_month.geojson: Gempa yang signifikan selama 30 hari terakhir
  • 4.5_day.geojson: Gempa dengan magnitudo > 4.5 dalam 1 hari

Informasi yang diberikan sangat lengkap, mulai dari magnitudo, lokasi, waktu, apakah menyebabkan tsunami atau tidak dan masih banyak lagi. Struktur data lengkap serta dokumentasi resmi bisa diakses di: https://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php

Baca juga: Mengenal Data GeoJSON untuk Analisis Geospasial

Berikut adalah contoh potongan output dari API USGS ini:

JSON

....
{
      "type": "Feature",
      "properties": {
        "mag": 0.72,
        "place": "8 km WNW of Cobb, CA",
        "time": 1751090647690,
        "updated": 1751090745875,
        "tz": null,
        "url": "https://earthquake.usgs.gov/earthquakes/eventpage/nc75201611",
        "detail": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc75201611.geojson",
        ....
        "magType": "md",
        "type": "earthquake",
        "title": "M 0.7 - 8 km WNW of Cobb, CA"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [-122.806663513184, 38.8424987792969, 1.27999997138977]
      },
      "id": "nc75201611"
    }
...

Pada contoh ini, kita akan menggunakan data semua gempa dalam 30 hari terakhir. Karena data ini bersifat dinamis, maka data yang disajikan bisa sangat berbeda tergantung kapan API tersebut diakses. Selain itu, untuk menyederhanakan, kita akan menyaring data gempa yang terjadi di wilayah Indonesia saja.

R

# Endpoint untuk data semua gempa dalam satu bulan terakhir
url <- "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson"

# membaca data
gempa_raw <- st_read(url)

# Filter data di mana lokasi mengandung kata "Indonesia" (pada properti 'place')
# Merubah format waktu menjadi format kalender (contoh: 2025-06-15 23:31:19.661)
gempa_id <- gempa_raw %>%
  filter(grepl("Indonesia", place)) %>%
  mutate(waktu = as.POSIXct(time / 1000, origin = "1970-01-01"))
# OUTPUT

Reading layer `all_month' from data source `https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson' using driver `GeoJSON'
Simple feature collection with 9888 features and 27 fields
Geometry type: POINT
Dimension:     XYZ
Bounding box:  xmin: -179.9767 ymin: -63.5738 xmax: 179.997 ymax: 87.0352
z_range:       zmin: -3.47 zmax: 625.955
Geodetic CRS:  WGS 84

Menampilkan Data Gempa di Peta Leaflet

Visualisasi Dasar

Langkah pertama untuk menampilkan data gempa pada peta adalah dengan menambahkan lingkaran kecil di titik-titik lokasi gempa. Kita menggunakan fungsi addCircleMarkers() yang secara default menggambarkan setiap titik sebagai simbol bulat berwarna merah. Jika lingkaran tersebut di-klik, maka akan menampilkan popup berisi informasi lokasi, magnitudo dan waktu gempa pada area tersebut.

R

# menampilkan Peta
leaflet(data = gempa_id) %>%
  addTiles() %>%
  addCircleMarkers(
    radius = 8,
    color = "red",
    stroke = FALSE,
    fillOpacity = 0.8,
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  setView(lng = 120, lat = -2, zoom = 4)     # mengatur view peta di sekitar Wilayah Indonesia
Peta sebaran gempa Bumi

Menggunakan Icon Khusus

Untuk membuat tampilan peta lebih menarik dan menyerupai gaya visual peta digital modern seperti Google Maps, kita bisa mengganti lingkaran menjadi ikon berbentuk pin. Ikon ini dapat berupa gambar PNG dari internet atau file lokal. Kita menggunakan fungsi makeIcon() untuk membuat ikon, dan menampilkannya menggunakan addMarkers(). Ikon ini akan tetap menampilkan saat diklik (popup).

Selain itu pada bagian ini kita juga dapat merubah tampilan peta menjadi lebih bersih dengan menghapus tulisan atau tampilan lain yang tidak terlalu penting. Caranya yaitu mengganti bagian addTiles() dengan addProviderTiles(providers$CartoDB.PositronNoLabels)

R

# Menyiapkan gambar icon (pin)
ikon_pin <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/684/684908.png",
  iconWidth = 24, iconHeight = 24
)

# menampilkan Peta
leaflet(data = gempa_id) %>%
  addProviderTiles(providers$CartoDB.PositronNoLabels) %>%       
  addMarkers(
    icon = ikon_pin,
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  setView(lng = 120, lat = -2, zoom = 4)       # mengatur view peta di sekitar Wilayah Indonesia
Peta sebaran gempa Bumi

Menggunakan Lebih dari Satu Icon

Visualisasi akan lebih informatif jika kita membedakan antara gempa yang signifikan dan yang tidak, berdasarkan magnitudo. Dalam contoh ini, kita anggap gempa signifikan adalah gempa dengan magnitudo ≥ 4,5. Oleh karena itu, kita menggunakan dua ikon berbeda: ikon merah untuk gempa signifikan, dan ikon abu-abu untuk gempa kurang signifikan.

Kita menambahkan kolom baru di data yang menentukan jenis ikon untuk setiap titik. Kemudian, kita gunakan dua kali addMarkers(), masing-masing untuk subset data dengan ikon berbeda. Ini memberikan peta yang lebih komunikatif secara visual dan memudahkan pengguna mengidentifikasi pola gempa dengan cepat. Untuk membedakan antara gempa signifikan dan tidak signifikan.

R

# Ikon merah untuk gempa signifikan
ikon_merah <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/684/684908.png",
  iconWidth = 24, iconHeight = 24
)

# Ikon orange untuk gempa kurang signifikan
ikon_orange <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/727/727606.png",
  iconWidth = 24, iconHeight = 24
)

# Tambahkan kolom ikon berdasarkan nilai magnitudo
gempa_id <- gempa_id %>%
  mutate(icon = ifelse(mag >= 4.5, "merah", "orange"))

# menampilkan Peta
leaflet() %>%
  addProviderTiles(providers$CartoDB.PositronNoLabels) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "merah"),
    icon = ikon_merah,
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "orange"),
    icon = ikon_orange,
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  setView(lng = 120, lat = -2, zoom = 4)
Peta Leaflet gempa Bumi

Menampilkan Label Ketika di Sorot

Pada kode-kode sebelumnya, informasi baru ditampilkan ketika setiap titik tersebut di-klik terlebih dahulu. Kita juga dapat membuat tampilan popup yang muncul langsung ketika kursor menyorot titik tersebut. Untuk menampilkannya kita perlu menambah atribut label. Secara default, label hanya bisa menampilkan teks biasa saja. Jika ingin mengatur tampilan lebih jauh lagi, maka perlu diatur melalui properti labelOptions.

Hasil kode berikut, saat kursor menyorot titik tertentu akan menampilkan label yang berisi informasi lokasi dan magnitudo gempa.

R

# Ikon merah untuk gempa signifikan
ikon_merah <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/684/684908.png",
  iconWidth = 24, iconHeight = 24
)

# Ikon orange untuk gempa kurang signifikan
ikon_orange <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/727/727606.png",
  iconWidth = 24, iconHeight = 24
)

# Tambahkan kolom ikon berdasarkan nilai magnitudo
gempa_id <- gempa_id %>%
  mutate(icon = ifelse(mag >= 4.5, "merah", "orange"))

# menampilkan Peta
leaflet() %>%
  addProviderTiles(providers$CartoDB.PositronNoLabels) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "merah"),
    icon = ikon_merah,
    label = ~paste0(place, " | M: ", mag),
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "orange"),
    icon = ikon_orange,
    label = ~paste0(place, " | M: ", mag),
    popup = ~paste0("<b>", place, "</b><br>Magnitudo: ", mag, "<br>Waktu: ", waktu)
  ) %>%
  setView(lng = 120, lat = -2, zoom = 4)
Peta Leaflet

Menambah Icon dalam Popup

Untuk membuat popup lebih menarik dan informatif, kita juga bisa menambahkan ikon gambar ke dalam isi popup. Pada dasarnya popup ditulis dalam struktur HTML sehingga kita dapat mengatur sedemikian rupa seperti penambahan gambar tersebut dengan tag <img> serta style lainnya yang diinginkan.

R

# Ikon merah untuk gempa signifikan
ikon_merah <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/684/684908.png",
  iconWidth = 24, iconHeight = 24
)

# Ikon orange untuk gempa kurang signifikan
ikon_orange <- makeIcon(
  iconUrl = "https://cdn-icons-png.flaticon.com/512/727/727606.png",
  iconWidth = 24, iconHeight = 24
)

# Tambahkan kolom ikon berdasarkan nilai magnitudo
gempa_id <- gempa_id %>%
  mutate(icon = ifelse(mag >= 4.5, "merah", "orange"))

# menampilkan Peta
leaflet() %>%
  addProviderTiles(providers$CartoDB.PositronNoLabels) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "merah"),
    icon = ikon_merah,
    label = ~paste0(place, " | M: ", mag),
    popup = ~paste0(
      '<div style="display: flex; align-items: center;">',
      '<img src="',
      ifelse(icon == "merah", ikon_merah["iconUrl"], ikon_orange["iconUrl"]),
      '" width="32" height="32" style="margin-right:10px">',
      '<div><b>', place, '</b><br>Magnitudo: ', mag, '<br>Waktu: ', waktu, '</div>',
      '</div>',
      '</div>'
    )
  ) %>%
  addMarkers(
    data = gempa_id %>% filter(icon == "orange"),
    icon = ikon_orange,
    label = ~paste0(place, " | M: ", mag),
    popup = ~paste0(
      '<div style="display: flex; align-items: center;">',
      '<img src="',
      ifelse(icon == "merah", ikon_merah["iconUrl"], ikon_orange["iconUrl"]),
      '" width="32" height="32" style="margin-right:10px">',
      '<div><b>', place, '</b><br>Magnitudo: ', mag, '<br>Waktu: ', waktu, '</div>',
      '</div>',
      '</div>'
    )
  ) %>%
  setView(lng = 120, lat = -2, zoom = 4)
Peta Leaflet

Pengembangan lanjutan

Berikut beberapa ide lanjutan yang bisa dikembangkan dari visualisasi ini:

  1. Menambahkan Layer Batas Administratif: Tambahkan shapefile batas provinsi atau kabupaten dari sumber data geospasial Indonesia seperti GADM atau BIG, untuk memberikan konteks lokasi gempa secara administratif.
  2. Slider Waktu Interaktif: Buat slider waktu menggunakan pustaka seperti leaflet.extras atau shiny agar pengguna bisa menyaring gempa berdasarkan rentang tanggal tertentu.
  3. Pengkodean Warna Berdasarkan Kedalaman: Terapkan skema warna berdasarkan kedalaman gempa (depth) agar pengguna bisa memahami struktur vertikal dari distribusi gempa.
  4. Penambahan Tooltip Statistik Ringkas: Tambahkan ringkasan statistik di pojok peta seperti jumlah gempa, rata-rata magnitudo, atau kedalaman tertinggi menggunakan pustaka tambahan seperti htmlwidgets atau htmltools.
  5. Integrasi dengan Data Realtime atau API Shiny: Hubungkan peta dengan dashboard dinamis berbasis shiny yang mengambil data secara realtime dan memungkinkan eksplorasi lebih mendalam melalui grafik dan tabel pendukung.

Ringkasan

Dengan menggunakan bahasa R dan pustaka leaflet, kita dapat memanfaatkan data GeoJSON gempa bumi dari USGS untuk membuat visualisasi interaktif yang informatif. Hasil ini, dengan pengembangan lebih lanjut akan bermanfaat dalam konteks edukasi publik, penelitian kebencanaan, maupun pemantauan sistem gempa bumi di Indonesia.

Referensi

Tulisan Lainnya

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi