Interaktive kart med leaflet
Generer interaktive nettkart med markører, popup-vinduer og kartlag.
Interaktive kart med leaflet er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.
Introduksjon til leaflet
leaflet-pakken pakker inn Leaflet.js-biblioteket og gjør det mulig å opprette interaktive webkart som kan zoomes, direkte fra R. Kartene er HTML-widgeter som vises i RStudio-visningen, R Markdown og Shiny-apper uten at De trenger JavaScript-kunnskaper.
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: Bakgrunnskartlag
addTiles() legger til standardflislaget fra OpenStreetMap. Bruk addProviderTiles(providers$ for å bytte til satellittbilder, CartoDB, Esri, Stamen eller en annen flisleverandør. Lagnavnene finnes i den innebygde listen 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 med popup-vinduer
addMarkers(lng, lat, popup) legger til markører som viser nåler på kartet. Argumentet popup godtar HTML-strenger, slik at De kan inkludere fet tekst, lenker eller bilder. Argumentet label viser tekst ved hovering uten at brukeren trenger å klikke.
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() gjengir sirkler med en fast størrelse i skjermpiksler (i motsetning til addCircles(), som skaleres med zoomnivået). De egner seg godt til å representere proporsjonale symboler – knytt radius til en datavariabel.
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: Koroplettkart
addPolygons() gjengir polygongeometrier direkte fra et sf-objekt. Fyllfargen kan knyttes til en datakolonne ved hjelp av palettfunksjonene colorNumeric() eller colorBin(). Et highlight-alternativ legger til effekter ved pekerbevegelse.
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 og fitBounds
setView(lng, lat, zoom) sentrerer kartet på en fast posisjon og et fast zoomnivå. fitBounds(lng1, lat1, lng2, lat2) zoomer automatisk slik at en geografisk avgrensningsboks passer i kartet. Dette er nyttig når De ikke kjenner dataenes utstrekning på forhånd.
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: Slå lag av og på
addLayersControl() legger til en kontroll med alternativknapper eller avkrysningsbokser for å slå grunnkart og overlagslag av og på. Bruk baseGroups for gjensidig utelukkende flislag og overlayGroups for datalag som kan slås av og på uavhengig av hverandre.
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 og addLegend
addPopups() legger til vedvarende popup-bokser som alltid er synlige. addLegend() oppretter en kartforklaring som er koblet til en fargepalett. Begge støtter HTML-innhold og kan tilpasses fullt ut med CSS-klasser.
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
)Fargepaletter: colorNumeric og colorBin
Funksjonene colorNumeric(), colorBin(), colorQuantile() og colorFactor() oppretter palettfunksjoner som knytter dataverdier til heksadesimale farger. Send resultatet til fillColor, og bruk den samme paletten i 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: Oppdatere kart i Shiny
leafletProxy('mapId') oppdaterer et eksisterende leaflet-kart i en Shiny-app uten å gjengi hele kartet på nytt fra grunnen av. Bruk den sammen med clearMarkers(), clearShapes() eller addMarkers() for å reagere effektivt på brukerinndata.
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 runFullstendig interaktivt koroplettkart
Her er et produksjonsklart koroplettkart som kombinerer alle de viktigste funksjonene: leverandørfliser, polygonfyll, utheving ved pekerbevegelse, dynamiske popup-vinduer, en fargeforklaring og lagkontroller – alt på under 25 linjer.
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')Kort kontrollspørsmål
I en Shiny-app ønsker De å oppdatere markørposisjoner på et eksisterende leaflet-kart når brukeren endrer en rullegardinliste – uten å gjengi hele kartet på nytt. Hvilken funksjon bør De bruke?
Oppsummering: leaflet-pakken
Viktigste punkter:
leaflet() |> addTiles()oppretter et interaktivt kart med OpenStreetMap-fliseraddProviderTiles(providers$bytter til andre flisleverandører) addMarkers()/addCircleMarkers()brukes for punktdata; brukpopupoglabeladdPolygons(fillColor = ~pal(col))brukes for koroplettkartcolorNumeric(),colorBin()ogcolorQuantile()oppretter palettfunksjoneraddLegend()kobles sammen med palettfunksjoner;addLayersControl()slår lag av og påleafletProxy()brukes til effektive kartoppdateringer i ShinyfitBounds()zoomer automatisk til dataenes utstrekning
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')Lær deg R med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 43
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Interaktive kart med leaflet» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «Interaktive kart med leaflet», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Interaktive kart med leaflet»?
Generer interaktive nettkart med markører, popup-vinduer og kartlag. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med R Academy?
Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Interaktive kart med leaflet»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?
Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Simple Features med sf-pakken
- Koordinatreferansesystemer og projeksjoner
- Romlige koblinger og operasjoner
- Interaktive kart med leaflet