Peta Interaktif dengan leaflet
Paparkan peta web interaktif dengan penanda, tetingkap timbul dan lapisan jubin.
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'
)
map2addMarkers 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 runKoroplet 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 OpenStreetMapaddProviderTiles(providers$bertukar kepada pembekal jubin lain) addMarkers()/addCircleMarkers()untuk data titik; gunakanpopupdanlabeladdPolygons(fillColor = ~pal(col))untuk peta koropletcolorNumeric(),colorBin(),colorQuantile()mencipta fungsi paletaddLegend()digunakan bersama fungsi palet;addLayersControl()menogol lapisanleafletProxy()untuk kemas kini peta Shiny yang cekapfitBounds()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')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
- Ciri Mudah dengan Pakej sf
- Sistem Rujukan Koordinat dan Unjuran
- Cantuman dan Operasi Ruang
- Peta Interaktif dengan leaflet