R Academy · Pelajaran

Peta Interaktif dengan leaflet

Paparkan peta web interaktif dengan penanda, tetingkap timbul dan lapisan jubin.

Pelajaran 4 daripada 413 langkah

Peta Interaktif dengan leaflet ialah pelajaran R Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran R Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Pengenalan kepada leaflet

Pakej leaflet membungkus pustaka Leaflet.js untuk mencipta peta web interaktif yang boleh dizum terus daripada R. Peta ialah widget HTML yang dipaparkan dalam Viewer 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 Asas

addTiles() menambahkan lapisan jubin OpenStreetMap lalai. Gunakan addProviderTiles(providers$) untuk bertukar kepada imejan satelit, CartoDB, Esri, Stamen atau mana-mana pembekal jubin lain. Nama lapisan terdapat dalam senarai terbina dalam 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 Tetingkap Timbul

addMarkers(lng, lat, popup) menambahkan penanda pin pada peta. Argumen popup menerima rentetan HTML, jadi anda boleh memasukkan teks tebal, pautan atau imej. Argumen label memaparkan teks apabila tetikus diarahkan tanpa perlu mengklik.

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() memaparkan bulatan yang saiznya ditetapkan dalam piksel skrin (berbeza daripada addCircles() yang berubah mengikut zum). Ia sesuai untuk mewakili simbol berkadaran — petakan radius kepada pemboleh ubah 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() memaparkan geometri poligon secara langsung daripada objek sf. Warna isian boleh dipetakan kepada lajur data menggunakan fungsi palet colorNumeric() atau colorBin(). Pilihan highlight menambahkan kesan apabila penuding berada di atas peta.

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 aras zum yang tetap. fitBounds(lng1, lat1, lng2, lat2) mengezum secara automatik agar sesuai dengan kotak sempadan geografi, yang berguna apabila anda belum mengetahui keluasan data terlebih dahulu.

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: Togol Lapisan

addLayersControl() menambahkan kawalan radio atau kotak pilihan untuk menghidupkan dan mematikan peta asas serta lapisan tindanan. Gunakan baseGroups untuk lapisan jubin yang saling eksklusif dan overlayGroups untuk lapisan data yang boleh ditogol secara berasingan.

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 timbul kekal (sentiasa kelihatan). addLegend() mencipta petunjuk peta yang dipautkan kepada palet warna. Kedua-duanya menyokong kandungan HTML dan boleh 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() mencipta fungsi palet yang memetakan nilai data kepada warna heks. Hantar hasilnya kepada fillColor dan gunakan palet yang sama dengan 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: Mengemas Kini Peta dalam Shiny

leafletProxy('mapId') mengemas kini peta leaflet sedia ada dalam aplikasi Shiny tanpa memaparkan semula keseluruhan peta dari awal. Gunakannya bersama clearMarkers(), clearShapes(), atau addMarkers() untuk memberikan respons yang cekap terhadap input pengguna.

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

Koroplet Interaktif Lengkap

Berikut ialah koroplet berkualiti untuk penggunaan sebenar yang menggabungkan semua ciri utama: jubin pembekal, isian poligon, sorotan apabila penuding berada di atas peta, kotak timbul dinamik, petunjuk warna, dan kawalan lapisan — semuanya dalam kurang daripada 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')

Semakan Pantas

Dalam aplikasi Shiny, anda mahu mengemas kini kedudukan penanda pada peta leaflet sedia ada apabila pengguna mengubah menu lungsur — tanpa memaparkan semula keseluruhan peta. Fungsi manakah yang patut anda gunakan?

Rumusan: Pakej leaflet

Inti pati utama:

  • leaflet() |> addTiles() mencipta peta interaktif dengan jubin OpenStreetMap
  • addProviderTiles(providers$) bertukar kepada pembekal jubin lain
  • addMarkers() / addCircleMarkers() untuk data titik; gunakan popup dan label
  • addPolygons(fillColor = ~pal(col)) untuk peta koroplet
  • colorNumeric(), colorBin(), colorQuantile() mencipta fungsi palet
  • addLegend() digunakan bersama fungsi palet; addLayersControl() menogol lapisan
  • leafletProxy() untuk kemas kini peta Shiny yang cekap
  • fitBounds() mengezum secara automatik kepada keluasan 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')
Percuma untuk bermula

Pelajari R dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
43
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Peta Interaktif dengan leaflet” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran R Academy, termasuk “Peta Interaktif dengan leaflet”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus R Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Peta Interaktif dengan leaflet”?

Paparkan peta web interaktif dengan penanda, tetingkap timbul dan lapisan jubin. Anda berlatih R Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan R Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran R Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.

Berapa lamakah pelajaran “Peta Interaktif dengan leaflet” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran R Academy ini?

Ya. Setiap pelajaran R Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Ciri Mudah dengan Pakej sf
  2. Sistem Rujukan Koordinat dan Unjuran
  3. Cantuman dan Operasi Ruang
  4. Peta Interaktif dengan leaflet
← Kembali ke R Academy