R Academy · Pelajaran

Peta Interaktif dengan leaflet

Tampilkan peta web interaktif dengan penanda, jendela pop-up, dan lapisan ubin.

Pelajaran 4 dari 413 langkah

Peta Interaktif dengan leaflet adalah pelajaran R Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar R Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus R Academy mencakup 4 pelajaran total.

Pengantar leaflet

Paket leaflet membungkus pustaka Leaflet.js untuk membuat peta web interaktif yang dapat diperbesar langsung dari R. Peta tersebut adalah widget HTML yang ditampilkan di Penampil RStudio, R Markdown, dan aplikasi Shiny tanpa memerlukan pengetahuan JavaScript.

library(leaflet)

# Minimal leaflet map: tiles + one marker
leaflet() |>
  addTiles() |>         # OpenStreetMap base layer
  setView(
    lng  = -74.006,
    lat  =  40.713,
    zoom = 12
  ) |>
  addMarkers(
    lng   = -74.006,
    lat   =  40.713,
    popup = '<b>New York City</b>'
  )

addTiles: Lapisan Peta Dasar

addTiles() menambahkan lapisan ubin OpenStreetMap bawaan. Gunakan addProviderTiles(providers$) untuk beralih ke citra satelit, CartoDB, Esri, Stamen, atau penyedia ubin lainnya. Nama lapisan tersedia dalam daftar bawaan providers.

library(leaflet)

# Default OpenStreetMap
map1 <- leaflet() |> addTiles()

# CartoDB light theme (great for data overlay)
map2 <- leaflet() |>
  addProviderTiles(providers$CartoDB.Positron)

# Satellite imagery
map3 <- leaflet() |>
  addProviderTiles(providers$Esri.WorldImagery)

# Custom tile URL
custom <- leaflet() |>
  addTiles(
    urlTemplate = 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
    attribution  = '(c) OpenStreetMap contributors'
  )

map2

addMarkers dengan Jendela Pop-up

addMarkers(lng, lat, popup) menambahkan penanda pin ke peta. Argumen popup menerima string HTML, sehingga Anda dapat menyertakan teks tebal, tautan, atau gambar. Argumen label menampilkan teks saat kursor diarahkan tanpa perlu mengeklik.

library(leaflet)

cities <- data.frame(
  name = c('New York', 'Los Angeles', 'Chicago'),
  lon  = c(-74.006, -118.244, -87.629),
  lat  = c( 40.713,   34.052,  41.878),
  pop  = c(8336817,  3979576, 2693976)
)

leaflet(cities) |>
  addTiles() |>
  addMarkers(
    lng   = ~lon,
    lat   = ~lat,
    popup = ~paste0(
      '<b>', name, '</b><br>',
      'Population: ', format(pop, big.mark = ',')
    ),
    label = ~name
  )

addCircleMarkers

addCircleMarkers() menampilkan lingkaran dengan ukuran tetap dalam piksel layar (berbeda dari addCircles() yang ukurannya berubah mengikuti pembesaran). Lingkaran ini ideal untuk merepresentasikan simbol proporsional—petakan radius ke variabel data.

library(leaflet)

cities <- data.frame(
  name = c('New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'),
  lon  = c(-74.006, -118.244, -87.629, -95.369, -112.074),
  lat  = c( 40.713,   34.052,  41.878,  29.760,   33.449),
  pop  = c(8336817,  3979576, 2693976, 2304580, 1608139)
)

leaflet(cities) |>
  addProviderTiles(providers$CartoDB.Positron) |>
  addCircleMarkers(
    lng    = ~lon,
    lat    = ~lat,
    radius = ~sqrt(pop / 50000),
    color  = 'steelblue',
    fill   = TRUE,
    fillOpacity = 0.6,
    popup  = ~paste0(name, ': ', format(pop, big.mark = ','))
  )

addPolygons: Peta Koroplet

addPolygons() menampilkan geometri poligon langsung dari objek sf. Warna isian dapat dipetakan ke kolom data menggunakan fungsi palet colorNumeric() atau colorBin(). Opsi highlight menambahkan efek saat kursor diarahkan ke objek.

library(leaflet)
library(sf)

nc <- st_transform(
  read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)

# Colour palette based on birth count
pal <- colorNumeric('YlOrRd', domain = nc$BIR74)

leaflet(nc) |>
  addProviderTiles(providers$CartoDB.Positron) |>
  addPolygons(
    fillColor   = ~pal(BIR74),
    fillOpacity = 0.7,
    color       = 'white',
    weight      = 1,
    popup       = ~paste0('<b>', NAME, '</b><br>Births 1974: ', BIR74),
    highlight   = highlightOptions(
      weight    = 3,
      color     = '#333',
      bringToFront = TRUE
    )
  ) |>
  addLegend('bottomright', pal = pal, values = ~BIR74, title = 'Births 1974')

setView dan fitBounds

setView(lng, lat, zoom) memusatkan peta pada lokasi dan tingkat pembesaran tetap. fitBounds(lng1, lat1, lng2, lat2) secara otomatis menyesuaikan pembesaran agar seluruh kotak pembatas geografis terlihat. Ini berguna ketika Anda belum mengetahui cakupan data sebelumnya.

library(leaflet)
library(sf)

nc <- st_transform(
  read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
bbox <- st_bbox(nc)

# fitBounds: auto-zoom to data extent
leaflet() |>
  addTiles() |>
  fitBounds(
    lng1 = bbox['xmin'], lat1 = bbox['ymin'],
    lng2 = bbox['xmax'], lat2 = bbox['ymax']
  ) |>
  addPolygons(
    data        = nc,
    fillColor   = 'lightblue',
    fillOpacity = 0.4,
    color       = 'steelblue',
    weight      = 1
  )

addLayersControl: Mengaktifkan dan Menonaktifkan Lapisan

addLayersControl() menambahkan kontrol radio/kotak centang untuk mengaktifkan dan menonaktifkan peta dasar serta lapisan hamparan. Gunakan baseGroups untuk lapisan ubin yang saling eksklusif dan overlayGroups untuk lapisan data yang dapat diaktifkan atau dinonaktifkan secara independen.

library(leaflet)
library(sf)

nc <- st_transform(
  read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)

high_birth  <- nc[nc$BIR74 > 3000, ]
low_birth   <- nc[nc$BIR74 <= 3000, ]

leaflet() |>
  addProviderTiles(providers$CartoDB.Positron, group = 'Light') |>
  addProviderTiles(providers$Esri.WorldImagery, group = 'Satellite') |>
  addPolygons(data = high_birth, color = 'red',   group = 'High Births (>3000)') |>
  addPolygons(data = low_birth,  color = 'blue',  group = 'Low Births (<=3000)') |>
  addLayersControl(
    baseGroups    = c('Light', 'Satellite'),
    overlayGroups = c('High Births (>3000)', 'Low Births (<=3000)'),
    options       = layersControlOptions(collapsed = FALSE)
  )

addPopups dan addLegend

addPopups() menambahkan kotak pop-up permanen (selalu terlihat). addLegend() membuat legenda peta yang terhubung ke palet warna. Keduanya mendukung konten HTML dan dapat disesuaikan sepenuhnya dengan kelas CSS.

library(leaflet)

leaflet() |>
  addTiles() |>
  setView(-79.0, 35.5, zoom = 7) |>
  addPopups(
    lng     = -78.639,
    lat     =  35.779,
    popup   = '<b>Raleigh</b><br>State Capital of NC'
  ) |>
  addLegend(
    position = 'bottomleft',
    colors   = c('red', 'blue', 'green'),
    labels   = c('High', 'Medium', 'Low'),
    title    = 'Risk Level',
    opacity  = 0.8
  )

Palet Warna: colorNumeric dan colorBin

Fungsi colorNumeric(), colorBin(), colorQuantile(), dan colorFactor() membuat fungsi palet yang memetakan nilai data ke warna heksadesimal. Teruskan hasilnya ke fillColor dan gunakan palet yang sama untuk addLegend().

library(leaflet)
library(sf)

nc <- st_transform(
  read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)

# Continuous palette
pal_num <- colorNumeric('Blues', domain = nc$BIR74)

# Binned palette (5 equal bins)
pal_bin <- colorBin('RdYlGn', domain = nc$BIR74, bins = 5)

# Quantile palette (equal number of features per class)
pal_qtl <- colorQuantile('YlOrRd', domain = nc$BIR74, n = 4)

# Use binned palette
leaflet(nc) |>
  addTiles() |>
  addPolygons(
    fillColor   = ~pal_bin(BIR74),
    fillOpacity = 0.7, weight = 1, color = 'white'
  ) |>
  addLegend('bottomright', pal = pal_bin, values = ~BIR74,
            title = 'Births 1974 (5 bins)')

leafletProxy: Memperbarui Peta di Shiny

leafletProxy('mapId') memperbarui peta leaflet yang sudah ada dalam aplikasi Shiny tanpa merender ulang seluruh peta dari awal. Gunakan bersama clearMarkers(), clearShapes(), atau addMarkers() untuk merespons masukan pengguna secara efisien.

library(shiny)
library(leaflet)

# Minimal Shiny app with leafletProxy
ui <- fluidPage(
  selectInput('colour', 'Marker colour:', choices = c('red', 'blue', 'green')),
  leafletOutput('map')
)

server <- function(input, output, session) {
  output$map <- renderLeaflet({
    leaflet() |> addTiles() |>
      setView(-79.0, 35.5, zoom = 7)
  })

  observeEvent(input$colour, {
    leafletProxy('map') |>
      clearMarkers() |>
      addCircleMarkers(
        lng   = -78.639, lat = 35.779,
        color = input$colour,
        label = paste('Raleigh -', input$colour)
      )
  })
}

# shinyApp(ui, server)  # uncomment to run

Peta Koroplet Interaktif Lengkap

Berikut peta koroplet berkualitas produksi yang menggabungkan semua fitur utama: ubin penyedia, isian poligon, sorotan saat kursor diarahkan, pop-up dinamis, legenda warna, dan kontrol lapisan—semuanya dalam kurang dari 25 baris.

library(leaflet)
library(sf)

nc <- st_transform(
  read_sf(system.file('shape/nc.shp', package = 'sf')), 4326
)
pal <- colorQuantile('YlOrRd', domain = nc$SID74, n = 5)

leaflet(nc) |>
  addProviderTiles(providers$CartoDB.Positron) |>
  addPolygons(
    fillColor   = ~pal(SID74),
    fillOpacity = 0.75,
    color       = 'white',
    weight      = 0.5,
    popup       = ~paste0('<b>', NAME, '</b><br>SIDS 1974: ', SID74),
    highlight   = highlightOptions(
      weight = 2, color = '#555', bringToFront = TRUE
    )
  ) |>
  addLegend(
    position = 'bottomright',
    pal = pal, values = ~SID74,
    title = 'SIDS Deaths 1974<br>(Quintiles)'
  ) |>
  addControl('<b>NC SIDS Data 1974</b>', position = 'topright')

Pemeriksaan Singkat

Dalam aplikasi Shiny, Anda ingin memperbarui posisi penanda pada peta leaflet yang sudah ada ketika pengguna mengubah daftar tarik-turun—tanpa merender ulang seluruh peta. Fungsi apa yang harus Anda gunakan?

Ringkasan: Paket leaflet

Hal-hal penting:

  • leaflet() |> addTiles() membuat peta interaktif dengan ubin OpenStreetMap
  • addProviderTiles(providers$) beralih ke penyedia ubin lain
  • addMarkers() / addCircleMarkers() untuk data titik; gunakan popup dan label
  • addPolygons(fillColor = ~pal(col)) untuk peta koroplet
  • colorNumeric(), colorBin(), colorQuantile() membuat fungsi palet
  • addLegend() dipasangkan dengan fungsi palet; addLayersControl() mengaktifkan dan menonaktifkan lapisan
  • leafletProxy() untuk pembaruan peta Shiny yang efisien
  • fitBounds() menyesuaikan pembesaran secara otomatis dengan cakupan data
library(leaflet)

# Three-line interactive map
leaflet() |>
  addProviderTiles(providers$CartoDB.Positron) |>
  addCircleMarkers(lng = c(-74, -118, -88), lat = c(41, 34, 42),
                   label = c('NYC', 'LA', 'Chicago'), color = 'steelblue')
Gratis untuk memulai

Belajar R dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
43
Pelajaran
159

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Peta Interaktif dengan leaflet” gratis?

Ya — teks lengkap “Peta Interaktif dengan leaflet” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus R Academy, upgrade ke CoddyKit PRO. Kursus R Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Peta Interaktif dengan leaflet”?

Tampilkan peta web interaktif dengan penanda, jendela pop-up, dan lapisan ubin. Kamu berlatih R Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai R Academy?

Tidak diperlukan pengalaman sebelumnya. R Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Peta Interaktif dengan leaflet” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fitur Sederhana dengan Paket sf
  2. Sistem Referensi Koordinat dan Proyeksi
  3. Penggabungan dan Operasi Spasial
  4. Peta Interaktif dengan leaflet
← Kembali ke R Academy